在Git中撤销特定的提交到远程回购
什么是撤消一个特定的提交最简单的方法是:
- 不在头上或头上
- 已被推到遥远的地方。
因为如果不是最新的提交,
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和一个相当常见的用例。 primefaces提交还有什么意义呢?
我们已经存储了一切,确保提交是完全primefaces的,你不应该能够容易地撤消一个或多个这些primefaces提交吗?
使用git log
识别提交的散列,然后使用git revert <commit>
创build一个新的提交,以删除这些更改。 在某种程度上, git revert
是git cherry-pick
的反面语言 – 后者将补丁应用于缺less它的分支,前者将其从具有它的分支中移除。
我不喜欢git revert
做的auto-commit,所以这可能对一些有帮助。
如果你只想修改的文件不是自动提交 ,你可以使用--no-commit
% git revert --no-commit <commit hash>
这与-n
相同
% git revert -n <commit hash>
因为它已经被推动了,所以你不应该直接操纵历史。 git revert
将使用新的提交来恢复提交的具体更改,以便不操纵提交历史logging。