git merge的三种操作分别是:【merge】,【squash merge】,【rebase merge】
背景
在master_0主干上拉一个分支brantch_0,在brantch_0上我提交了3次commint。
1. merge
使用命令:
$ git checkout master_0
$ git merge brantch_0
此时提交历史:
此时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)。如图:
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
命令后会出现一个编辑命令页面:
其中红框是brantch_0所有提交记录,要变基到哪个分支。
图中有解释pick, squash, fixup命令的含义。把不需要的提交记录使用squash和fixup进行修改,然后wq保存修改。此时查看brantch_0分支的提交记录会发现不要的提交记录已经合并。
然后再进行merge。
其中(H)是合并的merge记录。
运行git rebase --continue
命令继续变基。
运行git rebase --abort
命令回到rebase之前的状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。