我有一个我需要撤消的分支(Branch5
),它被合并到另一个分支(Branch2
),但由于,Branch3
,Branch4
和Branch6
也已合并到Branch2
。如何取消合并到Branch5
的{{1}}?
希望这是有道理的。 Branch2
基本上我需要的所有内容减去Branch2
,但Branch5
已合并到Branch5
一些合并/提交之前,并且已经被推送过了。基本上,我如何还原它,使Branch2
除Branch2
之外的所有分支都包含Branch5
内的所有内容?
因此,进行搜索会显示以下内容......
git revert -m 1 hash_of_merge_commit
如何获取合并的哈希值?此外,1
之后的-m
是什么意思?最后,这实际上会起作用吗?
答案 0 :(得分:1)
在不了解您的回购状态的情况下(特别是Branch5
目前的位置),确定Branch5
合并到Branch2
的SHA将会很难。但是,运行
git log --oneline --merges Branch2
会将日志限制为可以从Branch2
访问的合并提交,这应该允许您轻松识别(感谢提交消息)感兴趣的提交的哈希值。
1
之后的-m
是什么意思?为了说明事情,请考虑以下图表:
Branch5
合并到Branch2
... -- o -- A [HEAD=Branch2]
... -- o -- B [Branch5]
Branch5
合并到Branch2
... -- o -- A -- C [HEAD=Branch2]
/
... -- o -- B [Branch5]
... -- o -- A -- C -- o -- ... -- o -- o [HEAD=Branch2]
/
... -- o -- B [Branch5]
恢复提交C
意味着创建一个新提交(让我们称之为Z
)撤消C
之父和C
之间发生的更改。因为C
是一个合并提交,它有几个(这里是两个)父项,所以你需要告诉git revert
哪些更改,从A
到C
或{{} 1}}到B
,您实际上想撤消。
这就是C
选项的来源;它代表-m
,您可以在--parent-number
手册页中找到有关-m
选项的更多详细信息。在一个分支到另一个分支的简单合并中,
此处,git-revert
是A
的第一个父级,C
是B
的第二个父级。您要撤消C
和A
之间的更改;因此,你需要运行
C
该还原操作可能会引发冲突,您必须解决这些冲突,但它实际上应该根据需要撤消git revert -m 1 C
到Branch5
的合并。
Branch2
答案 1 :(得分:0)
所以你的命令是正确的,你获得提交哈希的方式是使用git log
。作为每个日志条目的一部分,提交的哈希也位于那里。只需输入哈希值,或者至少输入前几个字符,就可以了。