去除多余的Merge branch提交

在项目开发中,经常会有这样的情况发生,开发完了一个新功能,提交到远程仓库时,发现提交失败(其他同事已对其做了更改),先得pull最新代码再能提交。但这时会有一个恼人的冗余提交(Merge branch ......),如本地添加了一个file1,同时其他同事添加了file2并先行一步提交到远程仓库。等我提交时得先更新代码。这时项目提交历史就会如下所示:

e76dfc4216d797af0f093a8121b9a586d4d33ce6 Merge branch 'master' of https://github.com/XXX/helloworld
20171e3a0ed95a6b6a920cda8d7837fff2b393db Create file2 from remote
accf96f77485502f918b56007eb39af687674755 add file1 from local

怎样取消掉恼人的Merge branch提交呢?使提交历史变为简单的:

accf96f77485502f918b56007eb39af687674755 add file1 from local
20171e3a0ed95a6b6a920cda8d7837fff2b393db Create file2 from remote

解决方法(假设使用的是master分支)只须执行如下命令

git rebase origin/master

然后执行提交(git push origin master)即可。

解释:

当更新完代码后(即执行完git pull origin master),origin/master(远程分支)的提交历史(git log origin/master)如下所示:

C0(共同祖先) --> C1(create file2)

master的提交历史(git log)为:

C0 -->  C2(add file1) --> C1(create file2) -->C3(Merge branch)

在master分支中执行git rebase origin/master,相当于将C0以后的master分支的更改(add file1)以补丁文件的形式在origin/master分支中重新应用一遍,从而改写master分支的提交历史,使其成为origin/master分支的直接下游,即这时master的提交历史变为:

C0 --> C1 (create file2) --> C2(add file1)

同时origin/master的提交历史仍保持不变。

补充:

关于git rebase更详细的介绍见git文档--分支的衍合。


你可能感兴趣的:(git)