2017-02-14 79 views
0

我有以下简单的分支型号:混帐 - 如何在合并后恢复了错误的重订

A--B--C <- master  

D--E--F <- production, origin/production 

在一个点上,我重新合并到master

A--B--C--M <- master 
     /
D--E--F-/ <- production 

然后尝试了另一个分支的基线反对master(使用--onto)但站在了错误的地方,所以历史变成:

A--B--C--M <- master,production  
     /
D--E--F-/ <- origin/production 

所以,现在,我有masterproduction指向相同的提交,它应该只是master的提交。

如何将production指向origin/production

+1

'git checkout production && git reset --hard origin/production'? – Whymarrh

+0

@Whymarrh我想过那个,但不知道我需要如何处理原始“生产”作为父项的分支。它应该只是一个简单的rebase? – Pipetus

+0

没有rebase。就像你发布的一样简单。谢谢。 – Pipetus

回答

3

我觉得这是一个更加清晰,如果你确保你的标签上右侧边,指着分支的顶端承诺,因为这是一个名称如何分支实际上Git中工作(它们指向一个承诺,这我们所说的分支):

A--B--C--M <-- master 
     /
D--E--F  <-- production, origin/production 

当你做你做的事,你复制没有提交(幸运),并干脆搬到标签production指向提交M

A--B--C--M <-- master, production 
     /
D--E--F  <-- origin/production 

因此,您现在需要做的是将标签放回,以便名称production表示“提交F”。要做到这一点,你可以使用命令Whymarrh gave in a comment

git checkout production && git reset --hard origin/production 

git reset --hard告诉GIT中:

  • 重置当前分支(--soft--mixed--hard都这么做)为指向目标提交F;
  • 重置索引(--mixed--hard都这样做)作为它的内容,目标提交的内容F;和
  • 重置工作树(只有--hard这样做)以其内容为准,目标提交的内容为F

因为第一步复位当前支指针,我们需要git checkout选择production作为当前分支(除非它已经电流,当然)。

重置索引和工作树是目前所需的副作用,因为我们不打算将从提交M中提取的任何索引或工作树内容带回到F之后的新提交中。

+0

感谢您的回答,明确的解释和建议:) – Pipetus