撤消特定提交的最简单方法是: 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操做和一个至关常见的用例。 原子提交还有什么意义? 方法
咱们已经举办藏起来 ,并要保证的提交是彻底原子,你不该该可以很容易地撤销这些原子提交的一个或多个?
我不喜欢git revert
所作的自动提交,因此这可能对某些人有帮助。
若是您只想让修改后的文件不是自动提交 ,则可使用--no-commit
% git revert --no-commit <commit hash>
这与-n
相同
% git revert -n <commit hash>
由于它已被推送,因此你不该该直接操纵历史。 git revert
将使用新提交从提交中恢复特定更改,以便不操纵提交历史记录。
使用git log
识别提交的哈希值,而后使用git revert <commit>
建立一个删除这些更改的新提交。 在某种程度上, git revert
与git cherry-pick
相反 - 后者将补丁应用于缺乏它的分支,前者将其从具备它的分支中移除。