我做了一个git重置来修复一个错误的提交,但是现在我的分支已经落后了

我做了一个git重置来修复一个错误的提交,但是现在我的分支已经落后了,git,github,Git,Github,我们让某人提交了一些文件,其中只有部分合并。简言之,任何一个退出的人最终都会得到一个被破坏的项目 我们解决了这个问题,做了一个git——重设。伟大的现在的问题是,我们落后了两步。但我们不希望这两项承诺。我们想假装xxyy之后的一切都没有发生过 这里最好的选择是什么?您已经解决了这个问题,至少在本地是这样。但是坏的提交仍然在远程服务器上存在。这里基本上有两个选项: 您可以使用git revert在远程上还原两次提交: git revert <SHA-1 of commit #1> gi

我们让某人提交了一些文件,其中只有部分合并。简言之,任何一个退出的人最终都会得到一个被破坏的项目

我们解决了这个问题,做了一个git——重设。伟大的现在的问题是,我们落后了两步。但我们不希望这两项承诺。我们想假装xxyy之后的一切都没有发生过


这里最好的选择是什么?

您已经解决了这个问题,至少在本地是这样。但是坏的提交仍然在远程服务器上存在。这里基本上有两个选项:

  • 您可以使用git revert在远程上还原两次提交:

    git revert <SHA-1 of commit #1>
    git revert <SHA-1 of commit #2>
    
    在此选项中,您将完全删除两个错误提交。但是beward,这也将重写远程分支的历史记录,这可能会迫使您组中的某些人(包括您自己)删除分支的本地副本,并从远程签出一个全新的版本


  • 执行
    git还原可能是最安全的选择,因为它不会伤害任何拥有该分支本地副本的人。

    问题可能是该人将这些提交推送到GitHub或其他社交编码服务

    现在,当您执行
    推送时
    ,推送非常小心,不会删除任何内容。但是,您可以通过以下方式强制接受历史重写:


    如前所述。

    您知道这些提交的哈希标识符吗?这可能会有所帮助:一旦推送,您就再也不能假装什么事情没有发生(除非使用
    git push-f
    ,但这被认为是有害的)。相反,
    git-revert
    错误提交,然后很好地推送。
    git-revert
    是一种方法。使用
    rebase-i
    ,您需要
    git push-f
    ,这被认为是一件坏事。@eckes我同意这是最安全的方法。也许在他的例子中,所讨论的偏远分支只由少数人共享,强行推进不是问题。无论如何,我给了其他任何可能从中受益的人一个选择。执行
    git还原
    确实是安全的,但是您需要先取消
    git重置--hard
    (例如
    git pull
    以恢复远程提交)。还原未出现在您自己的历史记录中的提交是没有意义的。这一点很好。我从他从一开始就应该做的事情的角度写下了答案。强行推进共享存储库被认为是不好的做法。这几乎保证了以后会出现问题,因为其他人仍然可以根据删除的提交进行提交。@彼得:除非你有一个团队就这个问题进行交互。我不是说这是最好的解决方案,而是说这是一个解决方案。
    git rebase -i
    
    git push origin HEAD --force