为什么git会创建合并提交?如何移除这些提交?

9

一位同事在接下来的几周中一直在开发一个功能,现在git提交记录看起来像:

colleag  add class  8b5bec5
colleag  add change 3535adc5
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   0cc2d24
colleag  add change
colleag  add validation     7eff440
colleag  rebase done wrong merge    f8e35e3
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   2168ac6
colleag  wrong merge    a6ed636
colleag  typo in spec   7b23633

我猜他正在进行以下操作:
git pull origin master

在他的工作领域上。
所以,我的问题是:
1)这是什么意思:
Merge branch 'NEW' of github.example.de:example/app into NEW    2168ac6 

这是一个合并提交,但为什么git在这里与远程合并?

2) 是否可能清除这些合并提交?我目前正在挑选提交,但不确定这是否是最佳方法。

阅读git日志后还可以提出什么建议?


你为什么想要清理它们? - Alex Feinman
它们在Git提交日志中看起来相当丑陋,引用了早已合并的提交。 - poseid
1个回答

21

这些提交是因为你的同事在本地分支上提交了一些工作,然后从远程拉取了新的提交。关键在于 git pull 是两个 git 命令的组合,即 git fetchgit merge。一般来说,这些提交相当无害,但根据我的经验,它们有时会引起一些问题。

可以通过运行 git pull --rebase origin master 来避免这些提交。这将使拉取成为 git fetchgit rebase 的组合。这将搁置本地提交并引入远程提交,然后逐个应用本地提交。至于您已经在远程的提交,您可以尝试使用交互式 rebase 进行清理,但这将比值得的麻烦更多。我会尝试改变您的同事的工作流程,并将这些提交保留在远程。更改共享历史记录是一项冒险且可能非常痛苦的过程。

如果只接受您的同事提交的提交,而不是选择合并提交,则不需要挑选提交。虽然一般来说,我更喜欢合并分支而不是尝试挑选提交,因为它会导致具有不同 sha 的相同补丁的提交,并且会导致合并分支比应该更困难。


好的,谢谢!我之前没有理解 fetch + rebase 和 fetch + merge 之间的区别。 - poseid
合并带有“错误”合并提交的分支,感觉像是引入混乱,这就是为什么我赞同挑选必要的提交进行精选。之后,我进行了git rebase --interactive并修复了多个提交。当然,缺点是SHAs现在被搞乱了,但是该分支已经关闭了开发。所以,谢谢! - poseid
看一下 Git Flow...这是一种管理具有复杂历史记录的提交的好策略。例如,保留一些长期运行的分支,用于成熟的工作和更动态的功能,而将其与 develop 分支分开。 http://alblue.bandlem.com/2011/11/git-tip-of-week-git-flow.html http://nvie.com/posts/a-successful-git-branching-model/ - Amos Folarin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接