撤消一个特定承诺在Git,被推到边远repos
-
22-09-2019 - |
题
什么是最简单的方法,以撤销特定承诺是:
- 不在头部或头部
- 已推至遥远。
因为如果它不是最新的承诺,
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
将恢复的具体变化,从一个承诺使用一个新的提交,以便不操纵犯下的历史。
不隶属于 StackOverflow