如何获取Git中当前提交的哈希?
当前回答
如果你想要超级黑客的方式:
cat .git/`cat .git/HEAD | cut -d \ -f 2`
基本上,git将HEAD的位置存储在.git/HEAD中,格式为ref:{path from.git}。此命令将读取该位置,将“ref:”切片,并读取它指向的任何文件。
当然,这在分离头模式下会失败,因为head不会是“ref:…”,而是哈希本身-但你知道,我认为你不会期望在bash一行中有那么多聪明。如果你不认为分号是作弊的话。。。
HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \ -f 2)")"; done; echo $HASH
其他回答
使用git rev list--max count=1 HEAD
git show-ref --head --hash head
如果你追求速度,Deestan提到的方法
cat .git/refs/heads/<branch-name>
比这里列出的任何其他方法都快得多。
以下是另一种方法:)
git log | grep -o '\w\{8,\}' | head -n 1
以下是Bashshell中使用直接从git文件读取的一行代码:
(head=($(<.git/HEAD)); cat .git/${head[1]})
您需要在git根文件夹中运行上述命令。
当您有存储库文件,但尚未安装git命令时,此方法很有用。
如果不起作用,请检查.git/refs/heads文件夹中您有什么样的头。
要将任何扩展对象引用转换为哈希,请使用git-rev-parse:
git rev-parse HEAD
or
git rev-parse --verify HEAD
要检索短哈希:
git rev-parse --short HEAD
要将引用(例如分支和标记)转换为哈希,请使用git show ref和git for each-ref。
推荐文章
- 如何从远程Git存储库中提取并覆盖本地存储库中的更改?
- Github:导入上游分支到fork
- Git单次修订的日志
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?