合并GIT分支而不提交日志

时间:2010-11-08 10:38:39

标签: git merge

目前,当我使用GIT时,我会为每个作业创建一个分支,并在完成之前进行各种提交。然后我与我的主分支合并并向上游推送。我可能在任何时候都有几个分支机构,并且在工作中间随着事情的发生而轻弹。

但是大多数这些提交只是保存点,即在宏观方案中并不重要。因此,当我合并分支时,如果分支日志没有与主日志合并,我会喜欢它。

有没有办法合并下面提交g的日志消息(而不是提交c或e)?

a [master] 
|
b (create branch 'job')
|\
| \
|  c 
|  |
d  e
|  |
f  g (next step is to merge 'job' branch with 'master')

3 个答案:

答案 0 :(得分:57)

当我使用“每个功能分支”方法时,我认为merge --squash非常有用。我在临时分支中的提交历史是完全垃圾,绝对没有意义。我真的希望再也看不到这段历史,而不仅仅是为了能够跳过它。

当提交进行代码审查时,重要的是不要创建额外的提交。

答案 1 :(得分:12)

有,但这是无稽之谈。你为什么要那样做?你将失去所有的分支历史和信息。

您可以使用g的提交消息进行合并提交,然后使用--first-parent选项浏览历史记录。

如果你真的想要从你的分支机构使用git merge --squash丢失历史记录,我不推荐它

修改

如果您因为不认为自己的历史非常干净而感到不开心,可以使用git rebase feature

您可以追溯编辑旧版并从现有分支创建新提交(实际上是重写它)。它允许您重写提交消息,拆分提交,压缩提交到单个提交,重新提交提交等。

你应该只在你没有发布你的分支时使用变基(即它只是一个私人分支),因为它会给其他开发人员带来麻烦,如果有人继续工作,可能会导致合并问题(之前)重新分支。

答案 2 :(得分:1)

正如“Trimming GIT Checkins/Squashing GIT History”中所述,如果您的提交ce使用前缀为fixup!的评论完成,那么rebase --interactive --autosquash(git1 。7 +,2010年2月)可以完全完成你所追求的目标。

  

使用fixup!指令,您可以在提交消息中保持“不可见”的压缩,同时仍然可以使用--autosquash选项自动提交重新排序。

要使用fixup!前缀提交,您可以定义别名

[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -

fixup别名将适用于那些“提交(这些只是保存点,即在宏观方案中不那么重要”)。