繁体   English   中英

如何通过它的数字(--count)获取git commit hash

[英]How get git commit hash by it number (--count)

我得到了命令提交的位置

git rev-list HEAD --count

例如,输出为1164。我想签出此提交号。 我怎样才能做到这一点? 我认为,需要获取此提交的哈希值,并通过它的哈希值将其提交。

通过在git rev-list命令行中添加--count ,您可以告诉它不显示修订列表,而仅显示不带--count参数的修订数量。

基本上是git rev-list HEAD --countgit rev-list HEAD | wc -l git rev-list HEAD | wc -l产生相同的输出( git rev-list HEAD的输出中的行数)。


问题的答案取决于“ commit#1164”到底是什么意思。

如果将提交按rev-list列出的方式进行计数,则第一个提交是当前提交(即HEAD ),而提交#1164是从HEAD开始可访问的最早的提交。 要获取其哈希值,请不要告诉git rev-list显示计数,而是让它显示修订版本(它显示其哈希值),并将其输出通过管道传递到tail -1以获得列表中的最后一个哈希值:

git rev-list HEAD | tail -1

但是请注意,通过向当前分支添加新的提交,编号将更改,并且提交#1164将是不同的提交。


如果按时间顺序对提交进行计数,则提交1是在存储库中创建的第一个提交,然后提交1164是当前的提交。 在这种情况下,您甚至不需要使用git rev-list (它遍历整个存储库,但是您不需要这样做)。 足够使用:

git rev-parse HEAD

获取当前提交的哈希值( HEAD )。


无论哪种方式,您生成的数字( 1164 )与Git都没有任何关系,并且也不以任何方式与任何提交相关联。 如果您签出具有至少1164提交的另一个分支,并按照相同的过程进行操作,则将获得与提交#1164不同的提交。

这是另一个解决方案:

git rev-list HEAD --reverse | nl | grep <your build number>

git rev-list HEAD --reverse打印从最旧到最新的所有提交哈希。 nl每行加上行号(实际上是count )。 最后,好的grep过滤器仅过滤您想要的行。

您可以将其进一步优化为使用awk的提交哈希:

git rev-list HEAD --reverse | nl | grep <your build number> | awk '{print $2}'

或使用git别名将其带入新的层次:

git config --global alias.build-number '!f() { git rev-list HEAD --reverse | nl | grep $1 | awk '"'"'{print $2}'"'"'; }; f'

别名用法:

git build-number <your build number>

上面的git config命令中的引用疯狂在这里进行了解释: https : //stackoverflow.com/a/1250279/320737

谢谢大家的回答,但这不是我想要的。 我知道使用git --count这不是一个好主意,但是目前,我们使用这种方法来标记我们的账单。

我写了一些bash片段,可以满足我的需求。

#!/bin/bash
SEARCH=$1
LAST=$(git rev-list HEAD --count)
DIFF=$((LAST-SEARCH))
git rev-list --skip=$DIFF --topo-order HEAD | head -n1

SEARCH在哪里-您要搜索的提交数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM