首页 文章

撤消已被推送到远程仓库的Git中的特定提交

提问于
浏览
647

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

  • 不在头部或头部

  • 已被推到遥控器 .

因为如果它不是最新的提交,

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操作和一个相当常见的用例 . 原子提交还有什么意义?

我们已经暂存stashing以确保提交完全是原子的,您是否应该轻松撤消一个或多个原子提交?

3 回答

  • 1013

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

  • 33

    我不喜欢 git revert 的自动提交,所以这可能对某些人有帮助 .

    If you just want the modified files not the auto-commit ,你可以用 --no-commit

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

    这与 -n 相同

    % git revert -n <commit hash>
    
  • 311

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

相关问题