还原一些Git提交,保留其他人?

时间:2012-10-10 06:29:45

标签: git

假设我提交了提交A,B和C,所有这些提交完全不同的代码路径。 (所以他们是独立的,并且提交B可以在没有A的变化的情况下存在,依此类推。)

提交A引入了一个错误,而提交B和C都没问题。所以我想在提交A之前恢复到我的代码状态,然后提交更改B和C.

最好的方法是什么?一种方法是简单地执行git revert <SHA-of-commit-before-A>然后手动添加回提交B和C - 是否有更好的解决方案?

2 个答案:

答案 0 :(得分:4)

您无需添加BC:它们已经提交,并且不会受到添加新提交的还原的影响(A的否定图片)。

另一种方法是(,如果您还没有推动这些提交)来执行交互式rebase(git rebase -i A^),并重新排序您的提交,完全删除A
您将在您的rebase中看到以下选项(请参阅git Book

# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

但同样,这将改变你的历史,并会让你成为一个强大的推动力 - 如果其他人已经从你的回购中撤出,这并不总是一个好主意。
在这种情况下,还原仍然是最安全的解决方案。

答案 1 :(得分:3)

如果您已经推送了更改(以便其他人可以看到),那么正确的做法是git-revert <SHA-of-A>。这显然使得新提交与A相反。如果没有人见过您的树,您可以使用git-rebase -i A^(其中A^表示&#34; A&#34;的父母)从A开始交互式重新排序或省略提交。在这种情况下,您可以删除A,它将完全按照您的描述执行(在A之前展开,然后仅重新应用B和C)。

相关问题