如何用合并后的提交还原合并提交?

时间:2020-04-04 11:15:27

标签: git

我已经知道如何还原合并提交,包括选择父项。
但是现在我面临另一种情况,在合并提交之后会有一个新的提交。

看着:

enter image description here

您可以看到合并提交“ 2”之后,有一个新的提交“ 1”。
我想要的只是将“ 3”的合并还原为分支母版。 (我知道“ 2”是合并提交)。

问题:

如何使用红色箭头还原合并提交? 我已经对相对提交进行了编号,因此可以更轻松地引用答案。

2 个答案:

答案 0 :(得分:2)

我倾向于将Tower作为我的git客户here you can see me directly reverting an older commit

没有重写历史记录:

首先在本地还原要删除的内容:

 git revert sha-of-2 -m X

其中X是父编号(在这种情况下,可能是1)。 See here for details

解决由此产生的所有合并问题。解决这些潜在冲突将确保正确应用1,而不必首先还原它。然后提交并推送。

结果将是:

-- 4 -- 2 -- 1 -- '2 <- master
        /
-- 3 --/

其中'22的倒数。

具有重写历史记录:

警告:重写历史记录后强行推入母版可能会对同一个分支的其他用户造成严重的负面影响。

进行交互式变基:

 git rebase -i sha-of-2

删除合并提交,保留提交1,然后强制推送主控。

结果将是:

-- 4 -- '1 <- master

-- 3

'1是一个新提交,其中包含1的原始更改以及您已解决的所有冲突。

使用新分支重写历史记录

警告:重写历史记录后强行推入母版可能会对同一个分支的其他用户造成严重的负面影响。

这可能更容易理解。它执行的功能与rebase示例完全相同,但是您无需自己应用rebase-fairy-dust,而是自己进行艰苦的工作。

您可以重新进行这些更改,而无需重新定级。重置为4,创建一个新分支,选择1,将主节点重置为'1,然后强制按下。

     /- '1 <- master
    /
-- 4 -- 2 -- 1
        /
-- 3 --/

git reset --hard sha-of-4
git checkout -B newmaster
git cherry-pick sha-of-1
# fix conflicts if any
git checkout master
git reset master --hard newmaster
git push --force

'11精选的版本。

答案 1 :(得分:0)

在命令行中,它应该像git revert 2一样简单,尽管我知道有时候恢复合并可能很困难。