将master合并到我的功能分支会覆盖git中的更改

时间:2016-12-13 11:32:53

标签: git

我有我的功能分支,分支被合并为主,并且在出现错误后,合并被还原。现在,当我尝试将master合并到我的分支中时,我的所有更改都被master重写,好像git认为我的更改已经过时并且不应该合并。

我找到了这个解决方案:https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt

但我不想恢复还原,那么有没有办法合并我的变化?

1 个答案:

答案 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