什么是最简单的方法,以撤销特定承诺是:

  • 不在头部或头部
  • 已推至遥远。

因为如果它不是最新的承诺,

git reset HEAD

不会的工作。并且因为它已经被推到一个遥远,

git rebase -i

git rebase --onto

会引起一些问题的遥控器。

越是这样,我不希望修改历史真的。如果有坏码,这是有史以及可以看出。我只是希望它在工作复制的,我不介意一个反向合并提交。

换句话说,是什么的 Git 相当于以下svn命令:

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

其消除的所有变化从295至302通过反向合并中的所有更改,这些修订,作为一个新的承诺。

svn merge -c -302 ^/trunk

这撤消302提交,当然,通过加入另一承诺,反向合并的变化,从各自的承诺。

我认为这应该是一个相当简单的操作在操一个相当普遍的使用情况。还有什么是所指的原子犯?

我们已登台 藏起来 和所有保证的承诺是完全的原子,你不应该能够撤消一个或更多的那些提交原子很容易吗?

有帮助吗?

解决方案

别散的承诺,使用 git log, 然后使用 git revert <commit> 创建一个新的承诺,消除这些变化。在一个方式, git revert 是来交谈的 git cherry-pick --后者适用于修补的一个分支,这是缺失的,前者将其从一个分支。

其他提示

我不喜欢现在的自动提交, git revert 不,所以这可能是有用的。

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

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

这是一样的 -n

% git revert -n <commit hash>

因为它已经推动,不应直接操作的历史。 git revert 将恢复的具体变化,从一个承诺使用一个新的提交,以便不操纵犯下的历史。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top