我正处于git bisect
会话的中间。
找出我目前在哪个提交(SHA1哈希)的命令是什么? git status
不提供此功能。
编辑:我想调用git log
并查看第一个条目是否有效?
答案 0 :(得分:127)
在git bisect
会话期间,您至少有5种不同的方式可以查看您当前已检入工作副本的提交(请注意,如果您不这样做,选项1-4也会有效一个二等分):
git show
。git log -1
。git status
。git bisect visualize
。我将在下面详细解释每个选项。
正如this answer中针对如何确定您当前已签出的提交(不仅仅是git bisect
期间)的一般问题所述,您可以将git show
与{-s
一起使用1}}抑制补丁输出的选项:
$ git show --oneline -s
a9874fd Merge branch 'epic-feature'
您也可以简单地git log -1
找出您目前正在进行的提交。
$ git log -1 --oneline
c1abcde Add feature-003
在Git版本1.8.3+(或者它是早期版本?)中,如果您将Bash提示符配置为显示当前分支已经签出到您的工作副本中,那么它还会显示当前提交您在二等分会议期间或当您处于“独立的HEAD”状态时已经签出。在下面的示例中,我目前已签出c1abcde
:
# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $
# Prompt at detached HEAD state
user ~ (c1abcde...) $
同样从Git版本1.8.3+开始(可能更早,再次不确定),运行git status
也会显示您在平分期间以及处于分离HEAD状态时检出的提交:
$ git status
# HEAD detached at c1abcde <== RIGHT HERE
最后,当您执行git bisect
时,您也可以使用git bisect visualize
或其内置别名git bisect view
来启动gitk
,这样您就可以以图形方式查看您正在进行的提交,以及到目前为止您已将哪些提交标记为错误和良好。我很确定这在版本1.8.3之前就存在了,我只是不确定它在哪个版本中引入:
git bisect visualize
git bisect view # shorter, means same thing
答案 1 :(得分:81)
你可以这样做:
git rev-parse HEAD
进一步解释:git rev-parse
是git用于解释any of the exotic ways that you can specify the name of a commit的基本命令,HEAD
是对当前提交或分支的引用。 (在git bisect
会话中,它直接指向提交(“分离的HEAD”)而不是分支。)
另外(也更容易记住)就是这样做:
git show
...默认显示HEAD
指向的提交。有关更简洁的版本,您可以执行以下操作:
$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
答案 2 :(得分:16)
$ git rev-parse HEAD 273cf91b4057366a560b9ddcee8fe58d4c21e6cb
更新
或者(如果你有标签):
(适合命名版本,不太适合传回git。)
$ git describe v0.1.49-localhost-ag-1-g273cf91
或(正如马克建议的那样,为了完整性而在此列出):
$ git show --oneline -s c0235b7 Autorotate uploaded images based on EXIF orientation
答案 3 :(得分:9)
如果您只想提取一条简单的信息,可以使用git show
选项使用--format=<string>
来获取该信息...并要求它不要为您提供{{1}的差异}。这意味着您可以获得任何您想要的printf样式输出,这通常可能是单个字段。
例如,要获得缩短的哈希值(--no-patch
),您可以说:
%h
如果您希望将其保存到bash中的环境变量中(可能是人们想做的事情),您可以使用$()
syntax:
$ git show --format="%h" --no-patch
4b703eb
完整list of what you can do is in git show --help
。但这是一个可能有用的缩写属性列表:
$ GIT_COMMIT="$(git show --format="%h" --no-patch)"
$ echo $GIT_COMMIT
4b703eb
提交哈希%H
缩写提交哈希%h
树形哈希%T
缩写树形哈希%t
父级哈希%P
缩写为父哈希%p
作者姓名%an
作者电子邮件%ae
作者日期,UNIX时间戳%at
作者日期,严格的ISO 8601格式%aI
提交者名称%cn
提交者电子邮件%ce
提交者日期,UNIX时间戳%ct
提交者日期,严格的ISO 8601格式%cI
主题%s
已清理的主题行,适用于文件名%f
reflog选择器,例如,refs / stash @ {1} %gD
缩短了reflog选择器,例如stash @ {1} 答案 4 :(得分:2)
使用git show
,它还会显示提交消息,并在没有参数时默认为当前提交。