git pull 的理解
项目中是多人开发,之前每次拉取代码都是使用git pull,然后再去推送代码。
但是因为一起合作的人太多了,看提交记录看的很蒙蔽,因为大家都是一条线一条线的在合并。
后来团队要求拉取代码的是加上--rebase
,这样可以保证历史记录的干净。
于是去研究一下这个东西
git pull
作用是 将远程仓库中的更改合并到当前分支中
默认模式下 相当于 git fetch + git merge FETCH_HEAD 命令
更准确的说是,git pull
相当于: 先执行git fetch
+ 指定参数,然后执行git merge
命令将检索到的分支合并到当前分支。
下面是git pull
的过程
-
git fetch origin master
先拉取,让本地的origin/master
先更新到最新A---B---C master on origin / D---E---F---G master
-
git merge origin/master
A---B-----C origin/master / \ D---E---F---G--- H master
如果加上了 --rebase
-
第一步没有变化
A---B---C master on origin / D---E---F---G master
-
第二步由
git merge
换成了git rebase
A---B---C master on origin / D---E---F---G master | |变化 \/ A---B---C master on origin / D----A----B----C---E'---F'---G' master
简单说一下git merge
和git rebase
的区别:
首先明确一点:这两个都是合并分支的方式,他们最终合并的结果并没什么区别。
git merge 是将两个分支的末端节点和他们最近的共同祖先节点,这三个节点的文件快照做一个三方合并,生成一个新的commit(fast-forward就不说了😂)
git rebase 又称变基,它的操作相对复杂点。
举例子来说,比如分支B要合并到分支A上
- 先找到两个分支最近的共同祖先节点,然后将B分支上从这个节点之后的所有提交都提取出来放到本地文件夹下作为补丁文件存放。
- 将分支B拉取到分支A的最新节点
- 依次将存放的补丁文件一个一个应用到分支B上
网友评论