不破坏当前提交的情况下返回到之前的提交

6

我想回到之前的提交记录,但不想删除当前的提交记录。应该如何操作?使用 git reset HARD 命令会删除当前的提交记录,对吗?


1
可能是重复的问题:GIT回滚到以前的提交...怎么做? - Michael Durrant
3个回答

13
假设您没有任何未检入的更改,git checkout $OLD_COMMIT 将带您到那里,git checkout $BRANCH 将带您回来。
这将使您可能处于脱离的状态; 有关详细信息,请参见 git checkout --help, 但如果您只想在旧版本上运行测试或类似操作,那应该没问题。
您可能还感兴趣的是: git stash - 暂时存储未提交的更改 git show $SHA1 显示旧提交的更改差异 git show ${REF}:${PATH} 显示 $REF 中 $PATH 的内容
(在最后一个 git show 调用中,Ref 可以是 sha、分支或其他任何东西。)

2
针对新手的提示:当他说“git checkout $OLD_COMMIT”时,他通常可能意味着“git checkout b46b”(SHA的开头)。没有破折号、美元符号或任何其他符号。如果“master”是分支的名称,回到主分支,您可以执行类似于“git checkout master”的操作。 - mike rodent

1

使用git revert。这样可以撤销特定的提交,而不会影响之后的提交。

如果我正确理解您的情况,您有:

* abc123de a_good_commit
* bc123def a_bad_commit
* c123def4 another_good_commit

您可以使用 git revert HEAD^ 或使用特定的哈希值:git revert bc123def


0

对先前提交进行任何类型的重置将从您的分支中删除后续的提交,使它们不再是其一部分。 提交是您执行git log时看到的项目。

这并不意味着这些提交会立即被销毁,但由于您的意图不是要摆脱它们,因此您可能希望创建另一个分支并使用该分支查看以前的提交,以便您的原始分支保留最新的提交。 (创建新分支的关键字是:git branch <name>git checkout -b <name>。**)

硬重置与软重置更多地涉及到工作树中的文件以及未提交的更改会发生什么。 实质上,当您指定--hard时,唯一被销毁的是您未提交的更改。 只要您在最新的提交处留下了一个分支(或者您记得提交ID),您就可以通过切换回该分支或提交来恢复文件。 (即git checkout

** 您实际上可以在不创建额外分支的情况下四处查看,Daniel Pittman的答案描述了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接