如何通过Git分支的提交序号检出对应commit?
Git按提交序号检出对应提交的实现方法
Git没有原生支持git checkout 45 master这种直接按提交计数检出的语法,但可以通过命令组合实现同等效果,具体用法如下:
实现命令
首先要明确你计数的排序规则,两种常用场景对应不同命令:
- 如果你要的是从master分支最早的根提交开始正序计数的第45次提交(和你用
git rev-list --count master得到的总提交数的计数逻辑对应,总提交数对应的就是分支最新提交):
把命令里的git checkout $(git rev-list --reverse master | sed -n "45p")45换成你要的序号、master换成目标分支即可。 - 如果你要的是从master分支最新提交开始倒序计数的第45次提交,可以直接用Git内置的波浪线语法:
注意波浪线后的数字是序号减1,因为git checkout master~44master~0默认指向最新的第1次提交。
配置快捷别名
你可以给Git配置全局别名,后续直接用简化命令实现需求:
- 执行一次配置命令:
git config --global alias.checkout-count '!f() { rev=$(git rev-list --reverse "$2" | sed -n "$1p"); git checkout "$rev"; }; f'
- 后续直接调用别名即可,比如要检出master的第45次提交:
git checkout-count 45 master
注意事项
- 这种提交序号只是单个分支的线性计数结果,不是Git的全局唯一标识,如果分支发生变基、合并、回退等操作,序号对应的提交会发生变化。如果需要全局唯一标识提交,还是建议使用完整的Git提交哈希。
内容的提问来源于stack exchange,提问作者deanWombourne
相关产品推荐
相关产品推荐

