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

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

  • 不在脑壳或头部
  • 已被推到遥控器。

由于若是它不是最新的提交, svn

git reset HEAD

不起做用。 并且由于它被推到了遥远的地方, spa

git rebase -i

code

git rebase --onto

将致使遥控器出现一些问题。 get

更重要的是,我不想真正修改历史。 若是有错误的代码,它就在历史中能够看到。 我只想在工做副本中使用它,我不介意反向合并提交。 hash

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

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

经过反向合并这些修订中的全部更改,将全部更改从295移除到302,做为新提交。 io

svn merge -c -302 ^/trunk

固然,经过添加另外一个反向合并来自相应提交的更改的提交来撤消302提交。 bug

我认为它应该是一个至关简单的Git操做和一个至关常见的用例。 原子提交还有什么意义? 方法

咱们已经举办藏起来 ,并要保证的提交是彻底原子,你不该该可以很容易地撤销这些原子提交的一个或多个?


#1楼

我不喜欢git revert所作的自动提交,因此这可能对某些人有帮助。

若是您只想让修改后的文件不是自动提交 ,则可使用--no-commit

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

这与-n相同

% git revert -n <commit hash>

#2楼

由于它已被推送,因此你不该该直接操纵历史。 git revert将使用新提交从提交中恢复特定更改,以便不操纵提交历史记录。


#3楼

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

相关文章
相关标签/搜索