【问题标题】:Reverting a git merge -s ours恢复 git merge -s ours
【发布时间】:2011-03-14 17:49:24
【问题描述】:

我想恢复合并,因为我没有使用git merge -s recursive -X ours,而是使用了git merge -s ours

我已阅读 this blog post 关于还原合并的信息,但它似乎不适用于我的情况。

所以,我有 master 分支,然后是 topic 分支。在某些时候,我将master 合并到topic,然后将topic 合并到master。当我将master 合并到branch 时,我的文件发生了冲突,但我认为它没有做任何重要的事情,所以我想我说 git 跳过它,并使用我的版本。那时我使用了git merge -s ours,而不是git merge -s recursive -X ours,我今天发现它忽略了我的一个队友所做的一切。

现在,我正在尝试恢复此合并:

git checkout master
git revert -m 2 c475f0ac

这确实将我合并中忽略的更改(我队友的更改)引入了树。问题是现在,我的更改不再出现在树中。我已尝试还原还原,但没有成功。

关于如何恢复这样的合并有什么建议吗?

【问题讨论】:

  • 有没有可能你可以reset --hardmaster 和 topic 到合并前的状态?
  • 不完全。合并已被推送。我想我能做的就是恢复与--no-commit 的合并,以便我可以修复更改然后提交恢复。
  • 更新。这正是我所做的。使用 --no-commit 还原,修复更改然后提交。当时效果很好。
  • bump @VonC。 @Ionut:恐怕@VonC 从来没有注意到你的回复,因为你没有使用他的@name
  • 我不知道 SO 正在使用 @usernames 来通知更改。老实说,我仍然怀疑它确实如此。无论如何,我的评论不是针对@VonC,而是针对遇到此问题的任何人。

标签: git merge revert


【解决方案1】:

revert 子命令进行新的提交以撤消指定的提交,这对于 revert 合并提交通常很复杂

您可以将树设置为任何特定提交的状态,搜索合并提交(是 c475f0ac 吗?),然后将树设置为该提交的状态父级(注意命令末尾的点,这很重要):

git checkout c475f0ac^ .

如果要将状态设置为提交的不同父级,则应使用

git checkout c475f0ac^2 .

等等。 你会发现 gitk 命令在继续之前分析提交很有用(选择你想要的提交):

gitk c475f0ac

将状态设置为上一次commit后,就可以commit了

git commit --message 'restored tree to state previous to merge commit c475f0ac'

然后推

git push

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2010-09-15
    • 2017-12-05
    • 2021-12-27
    • 2019-04-11
    • 2018-07-08
    • 2018-06-14
    相关资源
    最近更新 更多