撤销Git中推送到远程回购的特定提交

撤消特定提交的最简单方法是:

  • 不在头部或头部
  • 已被推送到遥控器。
  • 因为如果它不是最新的提交,

    git reset HEAD
    

    不起作用。 而且因为它已经推到了遥远的地方,

    git rebase -i
    

    git rebase --onto
    

    会在遥控器中造成一些问题。

    更何况,我不想真正修改历史。 如果代码不好,它就在历史中,并且可以被看到。 我只是想在工作副本中,我不介意反向合并提交。

    换句话说,以下svn命令的Git等价物是什么:

    svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
    

    通过将这些修订中的所有更改反向合并为新提交,从而将所有从295到302的更改删除。

    svn merge -c -302 ^/trunk
    

    这撤销了302提交,当然通过添加另一个提交来反向合并来自相应提交的更改。

    我认为它应该是Git中一个相当简单的操作,也是一个相当常见的用例。 原子提交还有什么意义?

    我们已经存储了所有的东西,以确保提交是完全原子的,你不应该能够容易地撤销一个或多个这些原子提交吗?


    使用git log识别提交的散列,然后使用git revert <commit>创建一个新的提交来删除这些更改。 在某种程度上, git revertgit cherry-pick的反面 - 后者将补丁应用于缺少它的分支,前者将其从具有它的分支中移除。


    我不喜欢git revert做的auto-commit,所以这可能对一些人有帮助。

    如果你只是想修改文件而不是自动提交 ,你可以使用--no-commit

    % git revert --no-commit <commit hash>
    

    这与-n相同

    % git revert -n <commit hash>
    

    因为它已经被推送,所以你不应该直接操纵历史。 git revert将使用新的提交来恢复提交中的特定更改,以便不处理提交历史记录。

    链接地址: http://www.djcxy.com/p/1385.html

    上一篇: Undo a particular commit in Git that's been pushed to remote repos

    下一篇: pull/push from multiple remote locations