你能通过git命令撤销一个已经合并到你的git仓库中很久的过去的提交吗?或者您必须手动撤销在该提交中所做的所有更改?
wfveoks01#
你总是可以通过执行以下操作来恢复单个提交的更改:
git revert <commit-id>
注意,这将创建一个 new 提交,只撤消那些更改例如git log --oneline
git log --oneline
d806fc9 two 18cdfa2 bye 62c332e hello c7811ee initial
假设我想恢复提交18cdfa2中的更改:
18cdfa2
git revert 18cdfa2
我们现在有:git log -1 -p
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
eeq64g8w2#
你可以执行git revert <commit-hash>来撤销git提交。然而,这在大多数情况下是没有帮助的,因为它创建了一个新的提交添加到你的git reflog。当我不得不后退时,我通常会将分支重置到更早的阶段。要做到这一点,执行一个git reflog并查找您想要移动到的HEAD位置。
git revert <commit-hash>
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中的所有更改。我会做:
2a59955
8d386b8
Update: git reset --soft HEAD@{1}
这将重置我的分支到初始状态。这样做不仅会撤消所有更改,还会停止跟踪您可能在此提交中添加的所有文件。无论如何,这是在一次提交中撤消所有更改的最有效方法。这将撤消所有更改。有一个硬重置意味着回到过去(至少从git的Angular 来看)。为此,使用--hard代替--soft
--hard
--soft
2条答案
按热度按时间wfveoks01#
你总是可以通过执行以下操作来恢复单个提交的更改:
注意,这将创建一个 new 提交,只撤消那些更改
例如
git log --oneline
假设我想恢复提交
18cdfa2
中的更改:我们现在有:
git log -1 -p
eeq64g8w2#
你可以执行
git revert <commit-hash>
来撤销git提交。然而,这在大多数情况下是没有帮助的,因为它创建了一个新的提交添加到你的git reflog。当我不得不后退时,我通常会将分支重置到更早的阶段。要做到这一点,执行一个git reflog并查找您想要移动到的HEAD位置。
现在,假设我想移动到提交哈希
2a59955
并撤销8d386b8
中的所有更改。我会做:这将重置我的分支到初始状态。这样做不仅会撤消所有更改,还会停止跟踪您可能在此提交中添加的所有文件。无论如何,这是在一次提交中撤消所有更改的最有效方法。
这将撤消所有更改。有一个硬重置意味着回到过去(至少从git的Angular 来看)。为此,使用
--hard
代替--soft