25

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

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

测试代码很好,我真的只是想更改提交消息。通常我会直接使用 a git rebase -i f3e71c2^(因为这些都还没有被推动),但我的一位同事告诉我这会搞砸合并。我真的不想搞砸合并:)

我的同事说的对吗?如果是这样,我能做些什么,还是我只需要忍受这段历史?

4

2 回答 2

33

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

-p
--preserve-merges

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

手册页的 BUG 部分包括:

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


正如jthill评论所描述的(因为-p如果冲突解决是记录器,将更好地保留合并):

您可以追溯地为合并点亮 rerere:

git config rerere.enabled true
git checkout $merge^1

git merge $merge^2
# for Windows: 
# git merge $merge^^2

git read-tree --reset -u $merge
git commit -m-
git checkout @{-1}

正如Soufiane Roui评论中指出的那样:

对于 Windows CMD 用户,使用双插入符号来指向合并提交的父级(例如$merge^^1,而不是$merge^1)。
因为插入符号被视为转义字符。

于 2013-05-14T10:43:28.527 回答
-3

当且当您的同事没有将更改推送/拉到其他地方的 f3e71c2 上时,这将起作用。否则我不知道会发生什么。鉴于您尚未push编辑要修改的提交,更改提交消息完全是装饰性的(== 元数据更改),但是如果您的同事推/拉历史的任何部分,这仍然可能导致历史混乱在它上面。

(感谢 Abizern 指出这种故障模式)

于 2013-05-14T10:32:26.563 回答