3

git merge的三种操作分别是:【merge】,【squash merge】,【rebase merge】

背景

WX20191127-111447@2x.png

在master_0主干上拉一个分支brantch_0,在brantch_0上我提交了3次commint。

1. merge

使用命令:

$ git checkout master_0
$ git merge brantch_0

此时提交历史:
WX20191127-113432@2x.png
此时brantch_0的所有提交记录都会在master_0中,并且会多一个merge commit(H)。

2. squash merge

$ git checkout master_0
$ git merge --squash brantch_0

会把brantch_0的所有改动都放在master_0中但是并不会提交,本地会显示有东西未add需要手动commit,但是因为手动add,commit后在brantch_0的所有修改记录的修改人都会变成你自己
在提交记录上只会有一个提交记录(K)。如图:

WX20191127-114119@2x.png

3. rebase merge

由于squash merge会修改提交人,对于以后查询问题不方便。使用rebase merge可以避开这个问题。

$ git checkout brantch_0
$ git rebase -i master_0
$ git checkout master_0
$ git merge brantch_0

当执行了git rebase -i master_0命令后会出现一个编辑命令页面:

1574826636827.jpg
其中红框是brantch_0所有提交记录,要变基到哪个分支。
图中有解释pick, squash, fixup命令的含义。把不需要的提交记录使用squash和fixup进行修改,然后wq保存修改。此时查看brantch_0分支的提交记录会发现不要的提交记录已经合并。
然后再进行merge。
WX20191127-120203@2x.png
其中(H)是合并的merge记录。
运行git rebase --continue命令继续变基。
运行git rebase --abort命令回到rebase之前的状态。

文章推荐:
https://www.cnblogs.com/lookphp/p/5799533.html


发飙的蜗牛
19 声望3 粉丝