撤消特定提交的最简单方法是:
- 不在头部或头部
- 已推送到远程。
因为如果不是最新的提交,
git reset HEAD
没用。并且因为它已经被推送到远程,
git rebase -i
和
git rebase --onto
会导致 Remote 出现问题。
更何况,我真的不想修改历史。如果有错误的代码,它就存在于历史中并且可以被看到。我只是想把它放在工作副本中,我不介意反向 merge 提交。
换句话说,Git 是什么?等效于以下 svn 命令:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
通过反向 merge 这些修订中的所有更改,将所有更改从 295 删除到 302,作为新提交。
svn merge -c -302 ^/trunk
撤消 302 提交,当然是通过添加另一个提交来反向 merge 来自相应提交的更改。
我认为这在 Git 中应该是一个相当简单的操作,也是一个相当常见的用例。原子提交还有什么意义?
我们有分期 stashing所有这些都是为了确保提交是完全原子的,难道你不应该能够轻松地撤消一个或多个这些原子提交吗?
最佳答案
使用 git log
识别提交的哈希值, 然后使用 git revert <commit>
创建一个删除这些更改的新提交。在某种程度上,git revert
是git cherry-pick
的逆-- 后者将补丁应用于缺少它的分支,前者将其从拥有它的分支中删除。
关于git - 撤消 Git 中已推送到远程仓库的特定提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60456699/