如何从提交日志中清除合并提交?

时间:2018-03-28 01:06:39

标签: git

我有一个master分支机构,其他人会推动新员工和topic分支我不时工作,我会做git merge master,所以topic的提交日志看起来像

commit01 topic: add feature01
commit02 Merge master to topic
commit03 topic: add feature02
commit04 Merge master to topic
commit05 topic: add feature03
commit06 topic: update feature04
commit07 Merge master to topic

然后我在topic上完成了我的工作,并希望将其合并到master,在合并之前,我想删除这些Merge master to topic提交日志。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

每次将主分支更改同步到分支时,都应使用

git checkout master
git pull origin master
git checkout <your branch>
git rebase master

而不只是git merge master

注意:rebase会改变你的分支的提交历史记录,也许你应该强制推送到你的分支机构远程

当你完成你的分支时,你首先要修改master,然后git merge <your branch>(没有--no-ff合并)来掌握。

然后不会生成合并提交。

答案 1 :(得分:1)

当您将更改带入master时,可以执行squash merge,而不是删除合并提交。

这将在master上创建一个提交,可以有效地引入您进行常规合并时可能发生的所有更改。然后,无论你的主题历史有多复杂,在master上看起来都像是一次提交。

要做到这一点:

git checkout master
git merge --squash topic
git commit

这种方法有一些优点:

  1. 您不必担心微观管理您的提交。你可以每隔几秒钟保持过度微小的间距变化,并且不会污染主人的历史。
  2. 以这种方式合并会导致master上的原子更改。 master的历史现在只显示前后功能,而不是在您开发功能时的各个破碎状态,使其更容易阅读和导航历史。
  3. 由于您现在可以在Github中进行干净的squash合并,因此在合并时,此解决方案无需任何命令行重构即可运行。
  4. 此方法的主要缺点是,如果多个人在同一个功能分支上工作,则只有一个人能够声明新的压缩提交。这意味着git blame可能会将更改归因于错误的人。