好吧,我搞砸了!我正在使用具有以下结构的 repo
master
|
v
A--B--C--D--E--F--G
\
\
H--I
^
|
feature
我在
feature
分支上工作,完成后,我 merge 到 master
。这导致了我必须手动修复的 merge 冲突......我认为我做得对。然而,今天我的同事告诉我,我破坏了他们在 F
中开发的东西。这些损坏的部分与我添加的内容无关 - 显然在解决冲突时我删除了一堆东西。我如何“恢复”repo,以便在保留我的同时恢复他们的更改?更糟糕的是,我已经删除了本地存储库上的
feature
分支,并且它没有被推送到原点。这就是 repo 现在的样子 master
|
v
A--B--C--D--E--F--G--J
我试过了
git reset --hard HEAD~
git merge origin/master --no-ff
希望这能让我手动编辑 merge 的文件,但它总是自动提取最新的...
最佳答案
不用担心。没有什么重要的丢失,它是 git。
如果你 merge 了,你应该有一个 merge 提交(有两个父项的提交)。你确定历史是怎样的吗?使用 git log --graph
查看 merge 的结构。
由于您已经将 merge 发布到公共(public)存储库并且其他开发人员拥有它,因此我不建议使用硬重置和 rebase 。
因此,您应该找到您的 merge 提交并执行 git revert <sha1ofmerge> --mainline 1 --no-commit
,它会修改您的本地文件以撤消您通过 merge 所做的所有更改。然后查看更改,为您想要保留的内容执行 git checkout <files>
,只留下您需要做的更改,让其他开发人员更快乐。当只是 git commit
。
进行 merge 提交后,您可以通过 git branch feature <sha1ofmerge>^2
恢复您的分支,此处“^2”表示第二个父级,即当您将功能 merge 到 master 时。
关于git - 修复 git 中错误的冲突解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17051429/