如何从Git中检出特定的提交版本

37

我的代码无法运行,看起来我把一个错误的代码合并到了我的master分支。我无法确定问题出在哪里,因此我想逐个拉取特定的提交记录,查找在错误的提交前最后一次正常工作的版本。

如何拉取特定的提交记录呢?例如,在Bitbucket上,我看到分支test上有一个合并标识为9ce920d的提交,但我不知道如何拉取这个合并记录。

2个回答

86

这个问题使用了错误的术语。您无法“pull”(拉取)一个提交,只能“checkout”(检出)一个提交。如果拉取一个提交,将违反整个分支/提交结构并节省内存。您可以拉取一个分支或存储库中的所有提交,如果想要检出特定的提交,则可以进行检出操作:

git checkout 9ce920d

如果您在无头模式下(即使您有分支指向它们-您必须显式检出它们),您将不会有指向提交的指针,因此如果您想混淆一下,您可能需要创建一个分支:

git checkout -B mess_around_branch

为了保存记录,实际上 OP 想要丢弃从他们分支的最新提交到特定提交之前的所有提交。要在你的分支中执行此操作,请使用以下命令:

git reset 9ce920d

这将丢弃所有提交,但保留文件,让您决定是否希望保留某些更改。如果您真的想彻底删除所有更改:

git reset --hard 9ce920d

谢谢。那么我该如何放弃这个检出呢?我的意思是,假设我找到了一个问题,它在最新的提交之前几个提交中。然后我更愿意放弃这个检出并检出最新版本。我只需要使用最新合并 ID 再次检出吗? - Manu Chadha
@ManuChadha 要么从那里开始创建一个分支并进行工作,要么在你想修复的分支上执行 git reset --hard 9ce920d~1 命令将该分支移动到它下面的一个提交(你也可以指定提交)。但这是很危险的 - 你将会丢弃所有在它上面的提交。 - kabanus

6
git checkout <id>

应该可以解决问题。其中'id'是你想要获取的具体提交。


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