修改合并前发出的Git提交消息

时间:2013-05-14 09:18:19

标签: git git-rewrite-history

我在合并远程分支之前提交了一些测试代码。这次合并产生了很多冲突,并且花了一些时间才对。所以我的历史看起来像这样:

7ab562c Merge from remote branch
... whole load of commits brought across from the remote branch...
f3e71c2 Temporary TESTING COMMIT

测试代码很好,我真的只想更改提交消息。通常情况下,我会用git rebase -i f3e71c2^向前走(因为这一切都没有被推到),但是我被一位同事告知,这将搞乱合并。我真的不想搞砸合并:)

我的同事是否正确?如果是这样,我有什么可以做的,或者我只需要忍受这段历史吗?

2 个答案:

答案 0 :(得分:32)

您可以尝试使用git rebase --preserve-merges --interactive

-p
--preserve-merges
  

不要忽略合并,而是尝试重新创建它们。

手册页的BUG部分包括:

  

--preserve-merges --interactive提供的待办事项列表并不代表修订图的拓扑结构   编辑提交和重写他们的提交消息应该可以正常工作,但尝试重新提交提交往往会产生违反直觉的结果。


正如jthillcomment所述(因为-p会更好地保留合并,如果冲突解决方案是记录器):

  

您可以追溯轻度重新合并:

git config rerere.enabled true
git checkout $merge^1
git merge $merge^2
git read-tree --reset -u $merge
git commit -m-
git checkout @{-1}

答案 1 :(得分:-3)

如果和,如果您的同事没有在其他地方推送/撤销f3e71c2的更改,这将有效。否则我不知道会发生什么。更改提交消息完全是装饰性的(==元数据更改),因为您尚未push修改了您想要修改的提交,但如果您的同事推送/拉出任何提交,这仍然会导致历史混乱是历史的一部分。

(感谢Abizern指出这种失败模式)