我得到了通过命令提交的位置
git rev-list HEAD --count
例如,输出为1164。我想签出此提交号。我怎样才能做到这一点?我认为,需要获取此提交的哈希值,并通过它的哈希值检出提交。
答案 0 :(得分:3)
通过在--count
命令行中添加git rev-list
,您告诉它不显示修订列表,而只显示不带--count
参数的修订数量。
基本上git rev-list HEAD --count
和git rev-list HEAD | wc -l
产生相同的输出(git rev-list HEAD
的输出中的行数)。
问题的答案取决于“ commit#1164” 到底是什么意思。
如果按rev-list
列出的提交计数,则第一个提交是当前提交(也称为HEAD
),而提交#1164是从{{1 }}。要获取其哈希,请不要让HEAD
显示计数,而应让其显示修订(显示其哈希),并将其输出通过管道传递到git rev-list
以获取列表中的最后一个哈希:< / p>
tail -1
但是请注意,通过向当前分支添加新的提交,编号将更改, commit#1164 将是不同的提交。
如果您按时间顺序对提交进行计数, commit#1 是在存储库中创建的第一个提交,那么 commit#1164 是当前的提交。在这种情况下,您甚至不需要使用git rev-list HEAD | tail -1
(它遍历整个存储库,但是您不需要这样做)。足够使用了:
git rev-list
获取当前提交(git rev-parse HEAD
)的哈希值。
无论哪种方式,您生成的数字( 1164 )与Git都没有任何关系,并且也与任何提交都没有任何关联。如果您签出具有至少HEAD
个提交的另一个分支,并按照相同的过程进行操作,则您将得到与 commit#1164 相同的提交。
答案 1 :(得分:1)
这是另一种解决方案:
git rev-list HEAD --reverse | nl | grep <your build number>
git rev-list HEAD --reverse
打印从最旧到最新的所有提交哈希。 nl
在每行前面加上行号(实际上是count
)。最后,好的ol'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
答案 2 :(得分:0)
非常感谢您的回答,但这并不是我一直在寻找的答案。 我知道使用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
是您要搜索的内容的提交数量。