来自Git手册:
git checkout [--detach]< commit>准备在< commit>之上工作, 通过拆卸HEAD(参见“DETACHED HEAD”部分)并更新 索引和工作树中的文件。本地修改 保留工作树中的文件,以便生成工作 树将是提交中记录的状态加上本地 修改
似乎只有一个选项:HEAD分离。 我可以指定一个不让HEAD分离的选项吗?
[升级1] 我在帖子“Revert Git repo to a previous commit”
的评论中提出了类似的问题# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
我的问题是: @jefromi,在“git checkout 0d1d7fc32。”之后,已经是HEAD了 超脱?然后“git commit”对悬挂的HEAD无能为力。
检查当前目录中0d1d7fc32的状态,但是它 将HEAD留在原处。它与使用像git这样的东西是一样的 checkout other-branch path / to / file - 这将离开你 当前分支,只检查给定的文件。在这种情况下,我们是 签出整个当前目录而不是一个文件, 但仍然没有改变HEAD。 - Jefromi
所以我们似乎可以通过添加“。”来让HEAD不附加。
[更新2]从下面的答案和评论中,我认为一个简洁的是: git reset --hard
但现在我的问题是: Jefromi的方法是否正确?
git checkout 0d1d7fc32 .
git commit
有关其方法的详细信息,请参阅上述链接。
答案 0 :(得分:4)
如果你想检查一个不是任何分支的最后一次提交的提交,那么在HEAD
引用分支的同时,根本不可能检查出来。
您可以创建或更新分支以指向该特定提交,如使用git checkout
的{{1}}选项(或-b
覆盖现有分支)的评论中所示,或者如果您已经在某个分支上,您希望指向该特定提交,则可以使用-B
更新它并同时签出。
答案 1 :(得分:2)
如果要在不从HEAD分离的情况下检出给定的提交哈希,可以将其分配给新分支。只需将-b <newbranch>
添加到git checkout
命令的末尾(将<newbranch>
替换为新分支的名称)
git checkout <hash> -b mynewbranch
答案 2 :(得分:0)
如果您想以分支模式结账,并且您确定它已经位于分支的顶端,您需要首先确定该分支名称(使用“git show --decorate”):
git show --decorate <commit>
例如,我的电脑上的“git show --decorate 85d3204”现在告诉我“85d3204”位于“MY-BRANCH”的顶端:
commit 85d3204cd5c081abce3329729691fd9e056dcc19 (MY-BRANCH)
所以要在分支模式下检查这个提交(假设我想继续开发“MY-BRANCH”),我会跟着这个:
git checkout MY-BRANCH