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

标签 git merge

好吧,我搞砸了!我正在使用具有以下结构的 repo 协议(protocol)

                master
                  |
                  v
A--B--C--D--E--F--G
       \
        \
         H--I
            ^
            |
         feature

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

我怎样才能“还原” repo ,以便在保留我的更改的同时恢复它们的更改?更糟糕的是,我已经删除了本地存储库中的 feature 分支,并且它没有被推送到源。这就是 repo 协议(protocol)现在的样子

                   master
                     |
                     v
A--B--C--D--E--F--G--J

我试过了

git reset --hard HEAD~
git merge origin/master --no-ff

希望能让我手动编辑 merge 的文件,但它总是自动 pull 最新的...

最佳答案

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

如果你 merge 了,你应该有一个 merge 提交(一个有两个 parent 的提交)。你确定历史是什么样子的吗?使用 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 到主控中时。

关于git - 修复 git 中错误的冲突解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17051429/

相关文章:

git - 在git中查看对已删除文件的更改

git - 检查 git 中是否存在某些代码

python - 如何计算多个数据帧之间的重叠行?

git - 解决一个VS2017 GIT merge 冲突

git - 是否有命令行工具可以实时显示 git 状态?

git - 如果我想通过 ssh 进行远程存储库访问,是否有必要安装 Git 服务器?

python - Pandas 通过重叠两个 DataFrame 中的范围进行合并

Git merge 不会第二次 merge 文件

javascript - 如何在javascript中合并子数组中的对象,以便在一个数组中留下多个对象

linux - 如何编辑 Apache 配置以使 git pull 的更改不会立即反射(reflect)出来?