[英]How get git commit hash by it number (--count)
我得到了命令提交的位置
git rev-list HEAD --count
例如,输出为1164。我想签出此提交号。 我怎样才能做到这一点? 我认为,需要获取此提交的哈希值,并通过它的哈希值将其提交。
通过在git rev-list
命令行中添加--count
,您可以告诉它不显示修订列表,而仅显示不带--count
参数的修订数量。
基本上是git rev-list HEAD --count
和git 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.