在Git中找出HEAD分离的分支

3
在设置 OpenEmbedded 项目后,源代码会进入分离头状态。如何确定源代码是从哪个本地或远程分支检出的?
您可以检出分支并比较代码。是否有更简单的方法?
我正在使用 Git 版本 1.7.1。
$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git://arago-project.org/git/projects/meta-arago-amsdk.git
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.amsdk-06.00.00.00-integration.remote=origin
branch.amsdk-06.00.00.00-integration.merge=refs/heads/amsdk-06.00.00.00-integration

$ git branch -a
* (no branch)
  amsdk-06.00.00.00-integration
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/amsdk-05.06.00.00-integration
  remotes/origin/amsdk-05.07.00.00-integration
  remotes/origin/amsdk-05.08.00.00-integration
  remotes/origin/amsdk-06.00.00.00-integration
  remotes/origin/master
  remotes/origin/master-upstream
1个回答

11

解决方案1:git reflog

如果自从您的工作副本进入分离头状态以来,您没有移动您的HEAD引用,那么您可以使用git reflog -1找到您的头部分离的位置:

git reflog -1
d761f4a HEAD@{0}: checkout: moving from feature to head~5

请注意,我不确定这些信息在旧版本的Git中是否可用。

即使您一直在移动HEAD参考,您仍然可以在reflog中找到您分离的点:

git reflog | grep checkout

如果用户无法使用 grep,您可以在 PowerShell 中使用 findstr,或者使用内置于 Git 中的这些标志:

git log --walk-reflogs --grep-reflog "checkout" --oneline

解决方案2:查找包含当前提交的所有分支

查找包含你当前已检出的提交的所有分支(包括本地分支和远程跟踪分支):

git branch --all --contains HEAD

然后只需检查每个分支的第一个提交,以确定给定的提交是否是该分支的头:

git log -1 <branch>

感谢torek提供的简化解决方案


2
为了简化--contains方法:git branch --all --contains HEAD。请记住,任何您可以放置SHA-1值的地方,都可以放置一个名称,该名称将被解析为该值。请注意,如果您处于“分离的HEAD”状态,则不能保证有任何包含HEAD的分支名称。(相对较晚的git会给您提供(detached from <abbrev-sha1>)作为伪名称。) - torek
@kostix head 是一个正确的引用,你不需要将它大写以使其工作。 - user456814
1
@Cupcake,从哪个版本开始?您是否使用非区分大小写的文件系统(Windows或Mac OS X符合条件)?我的意思是,对于普通的Git而言,“HEAD”最终是一个普通的文件,需要使用文件系统访问内核调用进行查找。 - kostix
1
@kostix 我在Windows上同时使用Cygwin和msysgit bash。只有在Linux系统上HEAD才起作用? - user456814
1
@ Cupcake,是的,至少在1.7.x版本中可以。不确定Cygwin,但head可与Git for Windows一起使用(有时被错误地命名为msysGit)。这是NTFS提供的“按设计”:它是一个区分大小写但不敏感的文件系统。同样适用于Macs上的HPFS。 - kostix

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