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

时间:2012-06-23 08:51:39

标签: git

我正处于git bisect会话的中间。

找出我目前在哪个提交(SHA1哈希)的命令是什么? git status不提供此功能。

编辑:我想调用git log并查看第一个条目是否有效?

5 个答案:

答案 0 :(得分:127)

git bisect会话期间,您至少有5种不同的方式可以查看您当前已检入工作副本的提交(请注意,如果您不这样做,选项1-4也会有效一个二等分):

  1. git show
  2. git log -1
  3. Bash提示。
  4. git status
  5. git bisect visualize
  6. 我将在下面详细解释每个选项。

    选项1:git show

    正如this answer中针对如何确定您当前已签出的提交(不仅仅是git bisect期间)的一般问题所述,您可以将git show与{-s一起使用1}}抑制补丁输出的选项:

    $ 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:Bash提示

    在Git版本1.8.3+(或者它是早期版本?)中,如果您将Bash提示符配置为显示当前分支已经签出到您的工作副本中,那么它还会显示当前提交您在二等分会议期间或当您处于“独立的HEAD”状态时已经签出。在下面的示例中,我目前已签出c1abcde

    # Prompt during a bisect
    user ~ (c1abcde...)|BISECTING $
    
    # Prompt at detached HEAD state 
    user ~ (c1abcde...) $
    

    选项4:git status

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

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

    选项5:git bisect visualize

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

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

    enter image description here

答案 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,它还会显示提交消息,并在没有参数时默认为当前提交。