我有我的功能分支,分支被合并为主,并且在出现错误后,合并被还原。现在,当我尝试将master合并到我的分支中时,我的所有更改都被master重写,好像git认为我的更改已经过时并且不应该合并。
我找到了这个解决方案:https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt
但我不想恢复还原,那么有没有办法合并我的变化?
答案 0 :(得分:1)
是的,正如您链接的文档所解释的那样,您可以将您的分支重新绑定到最初分支的提交。这将重写历史记录,因此允许您重新合并分支。请注意,您需要将--no-ff
传递给git rebase
,否则它只会快进并且不会更改任何内容。
因此,假设您正在处理分支feature1
中的某个功能。
以下说明了工作流程:
$ git show --oneline
c7058f7 Initial commit
$ git checkout -b feature1
$ echo "feature" > feature1
$ git add feature1
$ git commit -m "feature1"
$ git checkout master
$ git merge feature1
$ git revert -m 1 HEAD
$ git checkout feature1
$ git rebase --no-ff c7058f7
$ git checkout master
$ git merge feature1
$ git log
commit 9bc0016d5c412ed7b9401bf0fd8fe5519a235a9f
Merge: fa2b2cb 48e007b
Merge branch 'feature1'
commit 48e007bcef4675981076d84d245a2a489340a509
feature1
1 file changed, 1 insertion(+)
commit fa2b2cbe4192a80d3c660f84f9d5f4ba4a7f7ba7
Revert "Merge branch 'feature1'"
This reverts commit 578502c12340f5ba7df47976d9e22245b5e9d8f8, reversing
changes made to c7058f7f1dbf6409bfbc44a61eda1adf1155a981.
1 file changed, 1 deletion(-)
commit 578502c12340f5ba7df47976d9e22245b5e9d8f8
Merge: c7058f7 7b4690e
Merge branch 'feature1'
commit 7b4690e19b45a089bc0db44cf66ebfa3495e48f9
feature1
1 file changed, 1 insertion(+)
commit c7058f7f1dbf6409bfbc44a61eda1adf1155a981
Initial commit
How to revert a faulty merge中总结了这一点:
但是如果你实际上不需要更改提交A,那么你需要一些 将其重新创建为具有相同更改的新提交的方法。该 rebase命令的--no-ff选项提供了一种方法:
$ git rebase [-i] --no-ff P
--no-ff选项使用全新提交创建一个新分支A'-B'-C' (即使在交互式情况下,所有SHA ID也将不同) 你实际上只修改了提交B.然后你可以合并这个新的分支 直接进入主线分支,并确保你将获得所有的 分支的变化。
在刚添加额外提交的情况下,您也可以使用--no-ff 修复它的主题。让我们重新审视一下所讨论的情况 开始这个方法:
P---o---o---M---x---x---W---x \ / A---B---C----------------D---E <-- fixed-up topic branch
此时,您可以使用--no-ff重新创建主题分支:
$ git checkout E $ git rebase --no-ff P
产生
A'---B'---C'------------D'---E' <-- recreated topic branch / P---o---o---M---x---x---W---x \ / A---B---C----------------D---E
您可以将重新创建的分支合并到主线中,而无需还原 提交W,主线的历史记录如下:
A'---B'---C'------------D'---E' / \ P---o---o---M---x---x---W---x---M2 \ / A---B---C