问题 合并冲突会在压缩提交时破坏我的提交消息


我使用git的常用工作流程是创建一个新的功能分支,使用频繁的提交做一些工作,然后在功能正常工作和/或稳定时合并回开发分支。

通常,当我这样做 git merge --squash feature-branch,我得到一个很好的“压缩以下提交”消息,自动填充来自功能分支的所有提交消息。

但是,如果存在任何合并冲突(比如说我完成并合并了另一个功能),我似乎丢失了来自分支的所有提交消息。自动填充的提交消息填充冲突,但不填写提交消息。我的提交消息在哪里?我可以让他们回来吗?


6067
2017-08-31 01:10


起源

为什么要挤压?你可以使用 rebase --interactive 清理,如果你认为你的提交太频繁和混乱,那么做一个正常的合并 - 这样你就不会失去历史。 - Cascabel


答案:


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

考虑做一个

git rebase master topic

在执行合并之前。本页的DESCTIPTION部分 http://git-scm.com/docs/git-rebase 应该是有帮助的。这也可以避免壁球的需要,因为交互式底板将允许你压缩你选择的提交。

编辑: 也可以看看: 在git中,merge --squash和rebase之间有什么区别?


4
2017-08-31 02:47



你肯定不需要那时的壁球合并 - 这是一个快进。 - Cascabel


是的,您可以获取壁球提交消息。它存储在.git / SQUASH_MSG中。

您可以使用以下命令将其用作模板:

git commit -t .git/SQUASH_MSG

7
2018-06-27 16:20



出于某种原因,这对我来说不起作用,但感谢指针 .git/SQUASH_MSG :) - Michael Mior
我跑了命令 git commit --file .git/SQUASH_MSG 它创建了提交消息,列出了压缩提交中的所有提交。 - Abdull


git没有真正失去任何东西。可以使用以下命令获取功能分支上的提交列表:

git cherry feature-branch

然后只需将其管道 git cat-file

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

您需要清理输出。我不知道如何更好地自动化它。


1
2017-08-31 02:21