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

标签 git version-control git-reset git-revert

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

  • 不在头部或头部
  • 已推送到远程。

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

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 revertgit cherry-pick的逆-- 后者将补丁应用于缺少它的分支,前者将其从拥有它的分支中删除。

关于git - 撤消 Git 中已推送到远程仓库的特定提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60456699/

相关文章:

git - 为什么每个分支的 git stash 不是唯一的?

git - Git 上的版本

git rm --cached 文件 vs git 重置文件

git - git中软重置和修改提交之间的区别

Git:如何撤消提交*和*恢复到最后一个分支

git - 给定一个 git refname,我可以检测它是散列、标签还是分支?

r - 将 Git 日志 numstats 解析到 R 表中

git - 从 CircleCI 推送到 Heroku 时出现协议(protocol)错误

project-management - 技术人员和非技术人员的项目管理+ SCM?

git - 从 git 存储库中删除文件(历史)