修复 git 中错误的冲突解决方案

Gra*_*Guy 4 git merge

好吧,所以我搞砸了!我正在使用具有以下结构的存储库

                master
                  |
                  v
A--B--C--D--E--F--G
       \
        \
         H--I
            ^
            |
         feature
Run Code Online (Sandbox Code Playgroud)

我正在feature分支上工作,一旦完成,我就合并到master. 这导致了我必须手动修复的合并冲突......我认为我做得正确。然而今天,我的同事告诉我,我破坏了他们在 中开发的东西F。这些损坏的部分与我添加的内容无关——显然在解决冲突时我删除了一堆东西。

我如何“恢复”存储库,以便在保留我的更改的同时恢复它们的更改?更糟糕的是,我已经删除了feature本地存储库上的分支,并且它没有被推送到原点。这就是仓库现在的样子

                   master
                     |
                     v
A--B--C--D--E--F--G--J
Run Code Online (Sandbox Code Playgroud)

我努力了

git reset --hard HEAD~
git merge origin/master --no-ff
Run Code Online (Sandbox Code Playgroud)

希望这能让我手动编辑合并的文件,但它总是自动提取最新的......

kan*_*kan 5

不用担心。没有什么重要的损失,它是 git。

如果合并,则应该有一个合并提交(具有两个父级的提交)。你确定历史是怎样的吗?用于git log --graph查看合并的结构。

由于您已经将合并发布到公共存储库并且其他开发人员也拥有它,因此我不建议使用硬重置和变基。

因此,您应该找到合并提交并执行操作git revert <sha1ofmerge> --mainline 1 --no-commit,它将修改您的本地文件以撤消合并所做的所有更改。然后检查更改,做git checkout <files>您想要保留的更改,并仅保留您需要做的更改,以使其他开发人员更满意。刚刚的时候git commit

合并提交后,您可以通过 恢复您的分支git branch feature <sha1ofmerge>^2,这里“^2”表示第二个父分支,即当您将功能合并到主分支时。