我有以下简单的分支模型:
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
所以,现在,我master
和production
指向同一个提交,这应该只是master
的提交。
如何将production
指回origin/production
?
答案 0 :(得分: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
; < / LI>
--mixed
和--hard
都执行此操作)以使其内容成为目标提交F
的内容;和--hard
执行此操作)以使其内容成为目标提交F
的内容。因为第一步重置当前分支指针,我们需要git checkout
选择production
作为当前分支(当然,除非它已经是当前的)。 / p>
此时重置索引和工作树是所需的副作用,因为我们不打算在M
之后将任何提取的索引或工作树内容带回到新的提交之后{ {1}}。