37

您可以通过 git 命令撤消长期以来已合并到您的 git 存储库中的过去提交吗?还是您必须手动撤消该提交中所做的所有更改?

4

2 回答 2

43

您始终可以通过执行以下操作从单个提交中恢复更改:

git revert <commit-id>

请注意,这会创建一个的提交,只撤消这些更改

例如git log --oneline

d806fc9 two
18cdfa2 bye
62c332e hello
c7811ee initial

假设我想恢复提交中的更改18cdfa2

git revert 18cdfa2

我们现在有:git log -1 -p

commit fb9d6627a71636503fc9a1eb4f725937c783ecee
Author: Seth <sehe@mint12.(none)>
Date:   Wed Oct 3 10:32:46 2012 +0200

    Revert "bye"

    This reverts commit 18cdfa27c964b66b624be1030250757b745d6866.

diff --git a/a b/a
index 0907563..3b18e51 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-bye world
+hello world
于 2012-10-03T08:31:14.310 回答
21

您总是git revert <commit-hash>可以撤消 git 提交。但是,在大多数情况下,这并没有什么帮助,因为它会创建一个新的提交添加到您的 git reflog。

当我不得不退后一步时,我通常会做的是将我的分支重置到更早的阶段。为此,请执行 git reflog 并查找要移动到的 HEAD 位置。

rizwan@dragonstone:~/myrepo$ git reflog -3
8d386b8 HEAD@{0}: commit: I did something I don't want
2a59955 HEAD@{1}: commit: Feedback from PR #792
1023102 HEAD@{2}: checkout: moving from one branch to another

现在,假设我想提交哈希2a59955并撤消8d386b8. 我会做:

Update: git reset --soft HEAD@{1} 

这会将我的分支重置为初始状态。这样做不仅会撤消所有更改,还会停止跟踪您可能在此提交中添加的所有文件。无论如何,这是在一次提交中撤消所有更改的最有效方法。

这将撤消您的所有更改。有一个硬重置意味着要回到过去(至少从 git 的角度来看)。用于--hard代替--soft这个

于 2012-10-03T09:11:08.203 回答