前戏
下载安装 Git。
PS:Gitee、Github、Coding 这类 Git 协作管理工具原理都一样。
配置
全局配置
该配置是全局配置,对于不同的管理工具,只要用的一套邮箱和密码,都可以使用。
git config --global user.name "在 Github 等站的名字或昵称"
>git config --global user.email "在 Github 等站注册使用的邮箱"
针对项目配置
需要在项目根目录下进行配置。
git config user.name "Your Name"
git config user.email "Your email"
注意:如果你配置了全局的用户名和邮箱,仍可以针对项目进行配置,Git 会优先考虑针对项目的配置,找不到才会去使用全局的配置。
查看当前配置
git config --list
查看当前配置
本地生成 SSH 公钥,并在 Github 等站配置
在配置好用户名和密码后,可以进行生成公钥。
为什么要配置 SSH 公钥
配置 SSH 公钥后,本地仓库与远程仓库可以通过 SSH 链接进行交互(pull,push 等操作)。
SSH 链接示例:
git@github.com:hqweay/MarkAll.git
反过来说,如果你通过 SSH 链接关联远程仓库与本地仓库,就必须配置 SSH 公钥,才能进行 Git 操作。
另一方面,如果你通过 HTTPS 链接进行关联,你就无需配置 SSH 公钥。
HTTPS 链接示例:
https://github.com/hqweay/MarkAll.git
若你通过 HTTPS 链接对本地仓库和远程仓库进行关联,在进行 push 操作时,Git 将会提示你手动输入密码以验证权限。
所以通过 SSH 与 HTTPS 链接关联远程仓库库与本地仓库的区别就显而易见了,通过 SSH 链接,一次配置后以后就无须重复输入密码,同时,不必输入密码,也在一定程度上保证了安全。
生成公钥
ssh-keygen -t rsa -C "xxxxx@xxxxx.com(你的邮箱)"
连续按三次回车,使用默认配置即可
查询公钥
cat ~/.ssh/id_rsa.pub
这一步是查询公钥,把显示的东西全复制下来即可。
如果操作系统是 Windows,可以打开 C:\用户\Users\.ssh\id_rsa.pub
文件查看公钥。
配置
然后把公钥粘贴到 Github 这类网站配置 SSH 公钥的的对应位置即可。
基本操作
git clone git@github.com:hqweay/MarkAll.git<仓库链接>
git pull orign<remote> master<branchName>
git push origin<remote> heng<branchName>
PS:了解下 rmeote 概念就行了。
git merge <想要合并到当前分支的分支名>
其它
git init
git remote
git branch
提交
git add .
git commit -m""
git push
常用命令
将本地库与远程库关联
git remote add origin git@github.com:hqweay/MarkAll.git
origin 为本地库的关联名
一个本地库关联多个远程库,就是通过更改 origin 这一项的名字实现的。
比如:
git remote add One git@github.com:hqweay/MarkAll.git
git remote add Two git@github.com:hqweay/MarkAll.git
就实现了一个本地库关联两个远程项目,需要进行操作时便分别通过名称 One,Two 来操作。
关联其它操作
删除关联 git remote rm origin
查询关联 git remote -v
clone 某分支
默认克隆 master 到本地:git clone git@github.com:hqweay/MarkAll.git
回退到某版本
- 使用
git log
命令查看所有的历史版本,获取某个历史版本的 id,假设查到历史版本的 id 是 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96。 git reset –hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96
- 把修改(强制)推到远程服务器
git push -f origin master
强制 push
git push -f origin master
设置默认仓库
以命令 git push -f -u origin master
为例。
其中 -f
是命令 --force
的缩写,意味着忽略冲突,将本地的内容强制推送,覆盖远程仓库。
-u
的意思是把当前使用的仓库 origin master
设置为默认仓库。
设为默认仓库后,下次就只需要操作 git push
而无需输入全部命令 git push origin master
达到推送的效果。
同步云端代码至本地
git pull origin 分支名
其他
- 删除本地某次 commit(比如最近一次不小心把 密码 add 了)
- 删除线上某次 commit
- …
Merge 操作
场景
假如本地仓库有一个分支 master 对应远程仓库的一个分支 master。
现在需要将远程仓库的另一个名为 master-new 的分支 merge 到本地分支 master。
操作
// 新建分支
git branch add master-new
// 切换到该分支
git checkout master-new
// 此时新建的分支还未与远程分支关联
// 把远程分支 pull 回来 默认就关联了
git pull origin<remote> master-new<远程仓库名>
// 切回原分支
git checkout master
// 把新分支的内容 merge 回来
git merge master-new
// 然后按照冲突进行解决即可
注意
如果要将远程仓库的一个分支 merge 到本地,需要保证远程分支的 commit 是较新的版本。
新到那种程度?
新于本地分支和被 merge 的分支的主干分支。
其他命令
查看项目的分支们(包括本地和远程)命令行 : $ git branch -a
删除本地分支
$ git branch -d <BranchName>
fetch
1 | $ git fetch origin master:temp |
submodule
添加
1 | git submodule add <url> <path> |
使用
克隆父项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:
1 | git submodule init |
或:
1 | git submodule update --init --recursive |
更新
进入子模块的目录下 git pull
。
删除
有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。
1 | rm -rf 子模块目录 # 删除子模块目录及源码 |
执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:
操作完在执行 git rm --cached 子模块名称 前,需要先提交一下更新。
1 | git rm --cached 子模块名称 |
使用 GIthub 的网络问题
科学上网
使用镜像
https://github.com.cnpmjs.org/
如命令
git clone https://github.com/hqweay/MarkAll.git
可以用git clone https://github.com.cnpmjs.org/hqweay/MarkAll.git
代替。
改 DNS
骚操作
使用 Gitee 等将 Github 的仓库同步过来,然后通过 Gitee 等提供的链接 clone 仓库。