如何在Git中检出一个分支的提交记录

76
如何在git中检出分支的某个提交版本?
例如,我的分支Dev有一个提交ad4f43af43e。如何检出该提交版本?不只是单个文件,整个分支都要检出。
我在网上搜索并找到: git checkout <commit>, 但它没有指定分支名称。

4
一个分支只是指向一个提交的指针。通过SHA1检出提交,然后将您的HEAD直接指向该提交。我建议您阅读https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell。 - rom1v
3个回答

64
git checkout <hash>         # non named commit
git checkout <branch_name>  # named commit

上面的两行将把HEAD指针放在给定的提交上。你应该知道,分支名称是一个提交,除非在该分支上添加新提交,则可以发展。

如果您想将分支Dev放到提交ad4f43af43e上,则可以执行此操作

git branch -f Dev ad4f43af43e

小心!这很危险,因为你可能会丢失提交记录。


如果您想要检出另一个分支上特定哈希值的特定文件,该怎么办呢?例如,我想将另一个分支上特定哈希值的单个文件内容检出到我的当前工作分支中? - Chuck
@Chuck 不是很确定,但这个链接或许能帮到你:https://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/ - Spray'n'Pray

50
如果您想从分支的特定提交开始继续工作,请确保您当前处于该分支。
git checkout dev

现在我想从dev分支检出特定的提交123654到一个新分支,同时保持主分支上的HEAD。

git checkout -b new-branch 123654

3
这个操作很顺利,但是发生了切换,因此 HEAD 将变为 new-branch - Paul F. Wood
在检出 123456 之前,您不需要检出 dev - tymtam

10
您可以 checkout 到该 commit-sha,然后从该提交中创建一个新分支(比如说 feature)。
$ git checkout <commit>
$ git checkout -b feature    # create a new branch named `feature` from the commit


# if you want to replace the current branch (say 'develop') with new created branch ('feature') 
$ git branch -D develop     # delete the local 'develop' branch
$ git checkout -b develop   # create a new 'develop' branch from 'feature' branch 

当你说创建分支“feature”时,该分支是在远程还是本地? - user1615666
3
@user1615666:所有的Git分支都是本地的。即使你的“远程跟踪分支”,例如origin/master,实际上也是本地的!它们只是在你运行git fetch时自动更新以匹配origin。把fetch看作“告诉我的Git通过互联网电话呼叫另一个Git,并获取其他Git对我的Git的任何更新。”而git push则是“让我的Git呼叫同样的另一个Git,但不是获取东西,而是给他们东西并要求他们更新其分支。” - torek

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