2010-08-31 71 views
11

我通常使用git的工作流程是创建一个新的特性分支,用频繁提交做一些工作,然后在特性工作和/或稳定时合并回开发分支。合并冲突毁坏我的提交信息,同时压扁提交

通常,当我做git merge --squash feature-branch时,我得到一个很好的“压扁的以下提交”消息,它自动填充来自功能分支的所有提交消息。但是,如果存在任何合并冲突(比如我在完成这个合并时完成并合并了另一个特性),我似乎失去了来自分支的所有提交消息。自动填充的提交消息填充冲突,但不填充提交消息。我的提交信息去了哪里?我可以让他们回来吗?

+0

为什么南瓜呢?如果你认为你的提交过于频繁和混乱,那么你可以使用'rebase --interactive'来清理,然后进行正常合并 - 这样你就不会失去历史。 – Cascabel 2010-08-31 03:15:17

回答

4

这并不直接回答你的问题,但你应该能够避免冲突。

事项在执行合并之前做

git rebase master topic 

。本页的DESCTIPTION部分应该是有帮助的。这也可以避免对壁球的需求,因为交互式底图可以让您压缩所选的提交。

编辑: 参见:In git, what is the difference between merge --squash and rebase?

+0

你肯定不会需要在这一点上的壁球合并 - 这将是一个快速前进。 – Cascabel 2010-08-31 03:12:40

1

没有什么是真的与混帐丢失。可以使用获得的特性分支提交的名单:

git cherry feature-branch 

然后简单地管这git cat-file

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch 

你需要清理的输出,虽然。我不知道一种更好地自动化的方法。

7

是的,你可以得到南瓜提交信息回来。它存储在.git/SQUASH_MSG中。

您可以使用它与下面的命令的模板:

git commit -t .git/SQUASH_MSG 
+2

由于某种原因,这并不直接为我工作,但感谢指向'.git/SQUASH_MSG' :) – 2013-06-14 15:01:27

+0

我运行了命令'git commit --file .git/SQUASH_MSG',它创建了提交消息列表在压扁的提交中提交所有提交。 – Abdull 2016-06-03 16:01:24