Git:我可以在没有HEAD分离的情况下查看提交吗?

时间:2015-11-11 17:16:48

标签: git

来自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

有关其方法的详细信息,请参阅上述链接。

3 个答案:

答案 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