Sar*_*kar 1788 git tfs changeset tfs-workitem
我想保留(现在)能够将Git变更集链接到存储在TFS中的工作项.
我已经编写了一个工具(使用Git中的一个钩子),我可以在其中将workitemidentifiers注入到Git变更集的消息中.
但是,我还想将Git提交的标识符(哈希)存储到自定义TFS工作项字段中.通过这种方式,我可以检查TFS中的工作项,并查看与工作项相关联的Git更改集.
如何从Git的当前提交中轻松检索哈希?
Jak*_*ski 2621
要打开任意扩展对象引用到SHA-1中,使用简单的git-REV-解析,例如
git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)
要么
git rev-parse --verify HEAD
Run Code Online (Sandbox Code Playgroud)
旁注:如果要将引用(分支和标记)转换为SHA-1,则有git show-ref和git for-each-ref.
out*_*ure 404
如果您只想要缩短哈希:
git log --pretty=format:'%h' -n 1
Run Code Online (Sandbox Code Playgroud)
此外,使用%H是获得长哈希的另一种方法.
Pau*_*ijs 143
另一个,使用git日志:
git log -1 --format="%H"
Run Code Online (Sandbox Code Playgroud)
它与@outofculture非常相似,虽然有点短.
Ale*_*der 105
要获得完整的SHA:
$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537
Run Code Online (Sandbox Code Playgroud)
要获得缩短版本:
$ git rev-parse --short HEAD
cbf1b9a
Run Code Online (Sandbox Code Playgroud)
Dee*_*tan 67
为了完整起见,因为还没有人建议它. .git/refs/heads/master是一个只包含一行的文件:最新提交的哈希值master.所以你可以从那里读它.
或者,如命令:
cat .git/refs/heads/master
Run Code Online (Sandbox Code Playgroud)
更新:
请注意,git现在支持在pack-ref文件中存储一些头部引用,而不是在/ refs/heads /文件夹中存储文件. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html
Joh*_*ree 50
总git describe有一点也好.默认情况下它会给你 -
john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75
Run Code Online (Sandbox Code Playgroud)
ecw*_*z91 46
提交哈希
git show -s --format=%H
Run Code Online (Sandbox Code Playgroud)
缩写提交哈希
git show -s --format=%h
Run Code Online (Sandbox Code Playgroud)
点击此处查看更多git show示例.
Rob*_*anu 28
使用 git rev-list --max-count=1 HEAD
小智 20
如果需要在脚本期间将哈希存储在变量中,则可以使用
last_commit=$(git rev-parse HEAD)
Run Code Online (Sandbox Code Playgroud)
或者,如果你只想要前10个字符(比如github.com)
last_commit=$(git rev-parse HEAD | cut -c1-10)
Run Code Online (Sandbox Code Playgroud)
Ser*_*gei 20
git rev-parse HEAD就可以了。
如果您需要将其存储到稍后结账,而不是保存实际分支(如果有)可能更可取:
cat .git/HEAD
Run Code Online (Sandbox Code Playgroud)
输出示例:
ref: refs/heads/master
Run Code Online (Sandbox Code Playgroud)
解析它:
ref: refs/heads/master
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Windows,那么您可以考虑使用 wsl.exe:
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g"
Run Code Online (Sandbox Code Playgroud)
输出:
refs/heads/master
Run Code Online (Sandbox Code Playgroud)
该值稍后可能会用于 git checkout,但它会指向其 SHA。要使其通过名称指向实际的当前分支,请执行以下操作:
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g" | wsl sed "s/^refs\///g" | wsl sed "s/^heads\///g"
Run Code Online (Sandbox Code Playgroud)
输出:
master
Run Code Online (Sandbox Code Playgroud)
Bri*_*son 14
我所知道的最简洁的方式:
git show --pretty=%h
Run Code Online (Sandbox Code Playgroud)
如果您想要添加散列的特定位数,可以添加:
--abbrev=n
Run Code Online (Sandbox Code Playgroud)
mir*_*ixx 13
也许你想要一个别名,所以你不必记住所有漂亮的细节.完成以下步骤之一后,您只需键入:
$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630
Run Code Online (Sandbox Code Playgroud)
按照接受的答案,以下是两种设置方法:
1)通过编辑全局配置(我的原始答案)来教授git显式方式:
# open the git config editor
$ git config --global --edit
# in the alias section, add
...
[alias]
lastcommit = rev-parse HEAD
...
Run Code Online (Sandbox Code Playgroud)
2)或者如果你喜欢快捷方式来教git快捷方式,最近由Adrien评论:
$ git config --global alias.lastcommit "rev-parse HEAD"
Run Code Online (Sandbox Code Playgroud)
从这里开始,用于git lastcommit显示最后一个提交的哈希值.
For*_*rdi 12
如果你想要超级hacky方式来做到这一点:
cat .git/`cat .git/HEAD | cut -d \ -f 2`
Run Code Online (Sandbox Code Playgroud)
基本上,git将HEAD的位置存储在表单中的.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
Run Code Online (Sandbox Code Playgroud)
我需要更多不同的东西:显示提交的完整sha1,但如果工作目录不干净,则在末尾添加星号.除非我想使用多个命令,否则之前答案中的所有选项都不起作用.
这是一个做过的班轮:
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
结果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*
说明:描述(使用带注释的标签)当前提交,但仅包含包含"NOT A TAG"的标签.由于标签不能包含空格,因此它永远不会匹配标签,因为我们要显示结果--always,所以命令会回退显示--abbrev=0提交的full()sha1,如果工作目录是,它会附加一个星号--dirty.
如果您不想附加星号,则其效果与之前答案中的所有其他命令相同:
git describe --always --abbrev=0 --match "NOT A TAG"
结果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe
git show-ref --head --hash head
Run Code Online (Sandbox Code Playgroud)
如果你想要速度,那么Deestan提到的方法
cat .git/refs/heads/<branch-name>
Run Code Online (Sandbox Code Playgroud)
比目前为止列出的任何其他方法快得多.
在文件“.gitconfig”的主目录中添加以下内容
[alias]
sha = rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)
那么你将有一个更容易记住的命令:
$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600
Run Code Online (Sandbox Code Playgroud)
这是Bash shell中的单行使用直接从git文件读取:
(head=($(<.git/HEAD)); cat .git/${head[1]})
Run Code Online (Sandbox Code Playgroud)
您需要在git根文件夹中运行以上命令.
当您拥有存储库文件时,此方法很有用,但未git安装命令.
如果不起作用,请检查.git/refs/heads文件夹中您有什么样的头.
小智 5
在 git bash 上,只需运行 $ git log -1
你会看到,这些行遵循你的命令。
commit d25c95d88a5e8b7e15ba6c925a1631a5357095db .. (info about your head)
d25c95d88a5e8b7e15ba6c925a1631a5357095db, is your SHA for last commit.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
810987 次 |
| 最近记录: |