如何获取Git中当前提交的哈希?
当前回答
主要git repo和子模块的漂亮打印:
echo "Main GIT repo:"
echo $(git show -s --format=%H) '(main)'
echo "Sub-modules:"
git submodule status | awk '{print $1,$2}'
示例输出:
3a032b0992d7786b00a8822bbcbf192326160cf9 (main)
7de695d58f427c0887b094271ba1ae77a439084f sub-module-1
58f427c0887b01ba1ae77a439084947de695d27f sub-module-2
d58f427c0887de6957b09439084f4271ba1ae77a sub-module-3
其他回答
echo“正在打印当前分支的上次提交id#:”;
git reflog
也许你想要一个别名,这样你就不必记住所有漂亮的细节。完成以下步骤之一后,您将能够简单地键入:
$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630
根据公认的答案,有两种设置方法:
1) 通过编辑全局配置(我最初的答案),教git明确的方法:
# open the git config editor
$ git config --global --edit
# in the alias section, add
...
[alias]
lastcommit = rev-parse HEAD
...
2) 或者如果你喜欢一个快捷方式来教git一个快捷方法,正如Adrien最近评论的那样:
$ git config --global alias.lastcommit "rev-parse HEAD"
从这里开始,使用gitlastcommit显示最后一次提交的哈希。
使用git rev list--max count=1 HEAD
git-rev-parse-HEAD完成了这个任务。
如果您需要在保存实际分行(如果有的话)之前将其存储到结账台:
cat .git/HEAD
示例输出:
ref: refs/heads/master
解析它:
cat .git/HEAD | sed "s/^.\+ \(.\+\)$/\1/g"
如果您有Windows,则可以考虑使用wsl.exe:
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g"
输出:
refs/heads/master
该值可能稍后用于git签出,但它会指向其SHA。要使其通过名称指向实际的当前分支,请执行以下操作:
wsl cat .git/HEAD | wsl sed "s/^.\+ \(.\+\)$/\1/g" | wsl sed "s/^refs\///g" | wsl sed "s/^heads\///g"
输出:
master
下面是另一个直接访问实现:
head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
head="$(cat ".git/${head#ref: }")"
done
这也适用于http,这对本地包存档很有用(我知道:对于公共网站,不建议将.git目录设置为可访问):
head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
head="$(curl -s "$baseurl/.git/${head#ref: }")"
done
推荐文章
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git