如何检索Git中当前提交的散列?
我想保留(现在)能够将Git变更集链接到存储在TFS中的工作项。
我已经写了一个工具(使用来自Git的钩子),我可以将workiteidentifiers注入Git变更集的消息中。
不过,我也想将Git提交的标识符(哈希)存储到自定义的TFS工作项目字段中。 通过这种方式,我可以在TFS中检查工作项目,并查看与工作项目相关的Git变更集。
我怎么能轻松地从Git的当前提交中检索哈希?
例如,要将任意扩展对象引用转换为SHA-1,只需使用git-rev-parse
git rev-parse HEAD
要么
git rev-parse --verify HEAD
旁注:如果你想把引用 ( 分支和标签 )转换成SHA-1,那么有git show-ref
和git for-each-ref
。
如果你只想要缩短的哈希:
git log --pretty=format:'%h' -n 1
此外,使用%H是获得长散列的另一种方法。
另外一个,使用git log:
git log -1 --format="%H"
虽然有点短,但和@outofculture非常相似。
为了完整,因为没有人提出它。 .git/refs/heads/master
是一个只包含一行的文件: master
上最新提交的散列。 所以你可以从那里读。
或者,如命令:
cat .git/refs/heads/master
更新:
请注意,git现在支持将一些头文件存储在pack-ref文件中,而不是作为/ refs / heads /文件夹中的文件。 https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html
要获得完整的SHA:
$ git rev-parse HEAD cbf1b9a1be984a9f61b79a05f23b19f66d533537
要获得缩短的版本:
$ git rev-parse --short HEAD cbf1b9a
总是有git describe
。 默认情况下,它给你 –
john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe release-0.19-11-g7a68a75
使用git rev-list --max-count=1 HEAD
如果您需要在脚本中将散列存储在variables中,则可以使用
last_commit=$(git rev-parse HEAD)
或者,如果你只想要前10个字符(如github.com)
last_commit=$(git rev-parse HEAD | cut -c1-10)
提交哈希
git show -s --format=%H
缩写提交哈希
git show -s --format=%h
点击这里查看更多的git show
示例。
我知道最简洁的方式:
git show --pretty=%h
如果你想要一个特定数量的哈希数字,你可以添加:
--abbrev=n
如果你想用超级哈克的方式来做到这一点:
cat .git/`cat .git/HEAD | cut -d \ -f 2`
基本上,git将头部的位置存储在.git / HEAD中,格式为ref: {path from .git}
。 这个命令读出来,切掉“ref:”,并读出它指向的任何文件。
当然,这将会以分离头模式失败,因为HEAD不会是“ref:…”,而是哈希本身 – 但是你知道,我不认为你期望在你的bash中有太多的智慧-liners。 如果你不认为分号是作弊,虽然…
HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \ -f 2)")"; done; echo $HASH
也许你想要一个别名,所以你不必记住所有漂亮的细节。 完成以下步骤之一后,您将可以简单键入:
$ git lastcommit 49c03fc679ab11534e1b4b35687b1225c365c630
继续接受的答案 ,这里有两种方法来设置:
1)通过编辑全局configuration(我原来的答案)教学显式的方法:
# open the git config editor $ git config --global --edit # in the alias section, add ... [alias] lastcommit = rev-parse HEAD ...
2)或者,如果你喜欢一个捷径教捷克捷径,最近评论阿德里安:
$ git config --global alias.lastcommit "rev-parse HEAD"
从这里开始,使用git lastcommit
来显示最后一个提交的散列。
git show-ref --head --hash head
如果你追求速度, Deestan提到的方法
cat .git/refs/heads/<branch-name>
比迄今为止列出的其他方法快得多。
在你的home-dir中的文件“.gitconfig”中添加以下内容
[alias] sha = rev-parse HEAD
那么你将有一个更简单的命令来记住:
$ git sha 59fbfdbadb43ad0b6154c982c997041e9e53b600
这是另一种方式:)
git log | grep -o '\w\{8,\}' | head -n 1
这是另一个直接访问实现:
head="$(cat ".git/HEAD")" while [ "$head" != "${head#ref: }" ]; do head="$(cat ".git/${head#ref: }")" done
这也适用于http,这对本地软件包档案很有用(我知道:对于公共网站,不build议使.git目录可访问):
head="$(curl -s "$baseurl/.git/HEAD")" while [ "$head" != "${head#ref: }" ]; do head="$(curl -s "$baseurl/.git/${head#ref: }")" done
这里是使用直接从git文件读取的Bash shell中的单行代码:
(head=($(<.git/HEAD)); cat .git/${head[1]})
你需要在你的git根文件夹中运行上面的命令。
当你有仓库文件时,这个方法会很有用,但是git
命令没有安装。