在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 revertgit cherry-pick的反面语言 – 后者将补丁应用于缺less它的分支,前者将其从具有它的分支中移除。

我不喜欢git revert做的auto-commit,所以这可能对一些有帮助。

如果你只想修改的文件不是自动提交 ,你可以使用--no-commit

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

这与-n相同

 % git revert -n <commit hash> 

因为它已经被推动了,所以你不应该直接操纵历史。 git revert将使用新的提交来恢复提交的具体更改,以便不操纵提交历史logging。