你是否可以通过git命令撤销已合并到Git存储库中的过去提交?或者您必须手动撤销该提交中所做的所有更改?
你可以通过以下方式撤销单个提交所做的更改:
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
git revert <commit-hash>
来撤销一个git提交。然而,在大多数情况下,这并不是有用的,因为它会创建一个新的提交添加到你的git reflog中。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
git commit --amend
来修改最后一次提交或者git revert
,您可以设置要回滚的提交的 ID。您可以使用git log
定位提交的 id。 [Git Amend](http://git-scm.com/book/en/Git-Basics-Undoing-Things) [Git Revert](http://gitready.com/intermediate/2009/03/16/rolling-back-changes-with-revert.html) - dasheddot