【问题标题】:Git diverged branches - revert changesGit 分歧分支 - 还原更改
【发布时间】:2012-05-10 12:58:22
【问题描述】:

一位新开发人员在一个大型 git 存储库上发疯了,真的把它搞砸了并推动了它。 他的所有改动都可以扔掉。

我的问题:我们的 git hoster 不允许 push --force,所以我必须先拉。

如果我这样做了,我会有很多合并和冲突,解决它们毫无意义。 恢复其他人所做的所有更改以便我可以推送当前版本的最佳方法是什么?

【问题讨论】:

    标签: git merge conflict


    【解决方案1】:

    我找到了一种方法来做我需要的事情。

    我在这里为处于相同情况的其他人发布我的解决方案。 很可能有一种更简单的方法,所以如果你知道的话,请不要犹豫。


    首先,提交所有更改,以便您拥有一个干净的工作目录。检查 git status 是否有任何更改。

    然后,创建一个新的临时分支来存储您的更改。

    git branch tmp
    

    现在你应该找到你和远程分支分歧的最后一次提交。 您将需要提交哈希,例如 63da978a9a4620790b75dfbae86d658a65dc3e25。

    找到它后,将您的主分支重置为该提交。

    git reset --hard COMMIT
    

    现在从您的遥控器中提取更改。不应发生冲突。

    git pull origin master
    

    现在您可以恢复应该被丢弃的提交。

    git revert COMMIT1
    

    如果您做的一切都正确,那么只需最后一步即可完成该过程:将您的 tmp 分支与所有更改合并。

    git merge tmp
    

    同样,不应该发生任何冲突。

    您现在有一个可以再次推送的最新分支。万岁!

    git push origin master
    

    【讨论】:

      【解决方案2】:

      有一个技巧你可以试试。

      git push origin :master
      

      这有效地删除了您名为 master 的分支。好消息是,您不需要任何权限即可执行此操作(是的,我知道,很奇怪)。

      完成后,您就可以这样做了

      git push origin master:master
      

      这将完全按照您的存储库中的方式重新创建主分支。

      无需处理任何冲突/合并。 永远不应该使用这个(除了你的情况,这是一个简单的方法)。

      这个技巧只允许删除这个开发者所做的每一个提交(根本不会有任何痕迹)。


      有一种“正常”的方式来做到这一点:

      • 获取分支
      • 还原分支顶部的错误提交
      • 推送回复
      • 在分支上重新定位您的工作

      【讨论】:

      • 遗憾的是,我的 Git 主机也阻止远程删除主分支,所以这在我的情况下不起作用。
      • 哦,这很奇怪,你能删除未合并的分支吗? (与您的问题无关,只是出于好奇)
      【解决方案3】:

      为避免冲突,请勿合并(通过git pulling),只需使用git fetch

      无论如何,如果你不能使用 push --force,唯一的选择是git revert

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 2018-01-27
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-20
        相关资源
        最近更新 更多