查找当前在Git中检出的提交


157

我正在git bisect开会。

找出我当前正在执行的提交(SHA1哈希)的命令是什么?git status没有提供这个。

编辑:我猜想打电话git log看看第一项作品吗?

Answers:


173

git bisect会话期间,您至少有5种不同的方式来查看当前签出到工作副本中的提交(请注意,当您不进行等分操作时,选项1-4也将起作用):

  1. git show
  2. git log -1
  3. 重击提示。
  4. git status
  5. git bisect visualize

我将在下面详细说明每个选项。

选项1:git show

以下对如何确定您当前已检出的提交(不是仅在期间git bisect)的一般问题的回答中所解释的,您可以git show-s选项一起使用以抑制补丁输出:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

选项2:git log -1

您也可以简单git log -1地找出您当前正在进行的提交。

$ git log -1 --oneline
c1abcde Add feature-003

选项3:重击提示

在Git 1.8.3+版本中(或者它是一个较早的版本?),如果您配置了Bash提示符以显示您已签出到工作副本中的当前分支,那么它还将显示您已检查的当前提交。在等分会话期间或处于“分离的HEAD”状态时退出。在下面的示例中,我目前已c1abcde签出:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

选项4:git状态

同样从Git 1.8.3+版本开始(可能还有更早的版本,再次不确定),运行git status还会显示在等分期间以及处于分离HEAD状态时检出的提交内容:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

选项5:git bisect可视化

最后,在执行时git bisect,您也可以简单地使用git bisect visualize或它的内置别名git bisect view来启动gitk,以便您可以以图形方式查看您正在进行的提交,以及到目前为止已标记为不好和好的提交。我很确定这在1.8.3版本之前就已经存在,我只是不确定它是在哪个版本中引入的:

git bisect visualize 
git bisect view # shorter, means same thing

在此处输入图片说明


整齐。当我问我不在Git 1.8上的问题时,从那时起,我得到了一个显示提交哈希的zsh右提示,我认为它甚至可能会显示一个专门的指标,专门用于我对等的情况,但是我还没有自从我问这个问题以来,实际上并没有做更多的事情git log -p -S <search>
史蒂文·卢

git status除非您处于分离状态,否则不会向您显示提交ID。否则它说:“在分支什么 ”。git show虽然有效
吉普

87

您可以这样做:

git rev-parse HEAD

进一步说明一下:git rev-parse是git的基本命令,用于解释您可以指定提交名称的任何奇异方式,并且HEAD是对当前提交或分支的引用。(在git bisect会话中,它直接指向提交(“分离的HEAD”),而不是分支。)

另外(更容易记住)是:

git show

...默认情况下显示HEAD指向的提交。对于更简洁的版本,您可以执行以下操作:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

3
如果您只想获取散列以供其他地方使用,则git rev-parse HEAD无需进行处理,而需要使用所有垃圾替代方法。
尼克T

17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

更新:

或者(如果您有标签):

(适合命名版本,不适用于传递回git。)

$ git describe
v0.1.49-localhost-ag-1-g273cf91

或者(如Mark所建议的,出于完整性考虑,在此处列出):

$ git show --oneline -s
c0235b7根据EXIF方向自动旋转上载的图像

7
您要求的是SHA1,而不是容易记住的东西。;-)
Alexander Gladysh 2012年

如果您想在脚本中进行某些检查,则此版本非常有用
Daniele Licitra '18

12

如果您只想提取一条简单的信息,则可以将其git show--format=<string>选项一起使用...,并要求不要给您提供diff与--no-patch。这意味着您可以获得所需的任何printf样式的输出,通常可能是单个字段。

例如,仅获取缩短的哈希(%h),您可以说:

$ git show --format="%h" --no-patch
4b703eb

如果您希望将其保存到bash中的环境变量中(人们可能想要这样做),则可以使用以下$()语法

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

您可以执行的操作git show --help的完整列表在中。但是,这里列出了一些可能有用的属性:

  • %H 提交哈希
  • %h 缩写提交哈希
  • %T 树哈希
  • %t 缩写树哈希
  • %P 父哈希
  • %p 缩写父哈希
  • %an 作者名
  • %ae 作者电子邮件
  • %at 作者日期,UNIX时间戳
  • %aI 作者日期,严格的ISO 8601格式
  • %cn 提交者名称
  • %ce 提交者电子邮件
  • %ct 提交者日期,UNIX时间戳
  • %cI 提交日期,严格的ISO 8601格式
  • %s 学科
  • %f 消毒的主题行,适合文件名
  • %gD reflog选择器,例如refs / stash @ {1}
  • %gd 缩短的reflog选择器,例如stash @ {1}

所有这些格式选项,但show不包含branch
bvj

2

使用git show,它还会向您显示提交消息,并且在不提供任何参数的情况下默认为当前提交。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.