git log 缩写格式长度

标签 git

我想以缩写格式从 GIT 日志中获取 SHA 编号。此命令将起作用:

git log -1 --format=%h

但是,默认缩写格式的长度为 7 个数字。 有什么办法可以改变吗?

最佳答案

对于 git log , --abbrev=<length>参数控制 %h 的输出多长时间和其他缩写哈希是:

$ git log -1 --format=%h --abbrev=4
d157

我还会注意到在使用 -1 时(或 --no-walk 在这种特殊情况下具有相同的效果,但如果您指定多个提交标识符则更有用),如果您想要的只是提交 哈希,请使用 git log太过分了:git rev-parse会给你哈希。没有明显的原因,用于限制的控制旋钮 git rev-parse特定长度的提交 ID 拼写为 --short而不是 --abbrev ;和 git rev-parse要求你拼出 HEAD如果你的意思是 HEAD ,所以:

$ git rev-parse --short=4 HEAD
d157

你能走多远或多短?

最长的挺长的,目前是40个字符,以后可能是64个。您可以 最短的是四个字符,这适用于小型存储库。但在某些特定存储库中,您可以输入的最短字符可能超过四个字符。

对于输出,您可以请求 --short--abbrev length 是你想要的任何值。太小或太大的值将根据需要升高或降低。 (请注意,在真正古老的 Git 版本中,如果您要求它们,它可能会向您显示四个字符的哈希值,即使它们太短而不能明确。当前的 Git 更智能。)

当您自己提供至少四个字符的缩短原始哈希 ID 时,如果它太短,您将收到如下错误:

$ git rev-parse 1111
error: short SHA1 1111 is ambiguous
hint: The candidates are:
hint:   111116ea13 blob
hint:   1111f64dd9 blob
1111
fatal: ambiguous argument '1111': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

旧版本的 Git 的错误消息不太好;这个,如果你读了hint:输出行——告诉你至少需要 111111111f从 Git 2.27.0 中选择一个可能的结果。

由于 Git 存储库会随着时间的推移而增长,因此有可能在存储库生命周期的早期使用非常短的哈希 ID,但稍后(比如五年后)会发现这个短的哈希 ID 现在是不明确的。例如,Linux 内核现在达到了 git log --oneline 的地步。使用 12 个字符以确保安全。如果你设置一个很短的--abbrev , git log输出将具有不同的输出散列大小,因为每个散列大小都已扩展到必要的最小值:

$ git log --oneline -n 12 --abbrev=4
0f1a7b (HEAD -> master) timer-of: don't use conditional expression with mixed 'void' types
5021b9 Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
714366 Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
65aa35 Merge tag 'erofs-for-5.4-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs
3fd57e7 char/random: Add a newline at the end of the file

注意如何提交 0f1a7b3fac0583083ca19d4de47403511ced3521可以缩短为 0f1a7b (六个字符),但提交 3fd57e7a9e66b9a8bcbf0560ff09e84d0b8de1bd花了七(3fd57e7)。当前有两个对象带有 3fd57e作为它们哈希 ID 的前六位十六进制数字:一个提交对象和一个树对象。随着时间的推移,随着越来越多的对象在 Linux 内核存储库中积累,甚至 3fd57e7可能会变得模棱两可。

关于git log 缩写格式长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36489841/

相关文章:

windows - 如何在 Git Bash for windows 中更改 RGB 颜色?

ruby-on-rails - 我应该在Heroku上部署Ruby on Rails应用程序吗

visual-studio-2010 - Visual Studio 项目的 Git 最佳实践

git - Phonegap 使用命令行工具添加插件

GitHub pull 请求显示已经在目标分支中的提交

通过管道命令的 Git 分支状态

git - 如何自定义msysgit的shell扩展的 "Git Bash Here"命令使用哪个终端?

git - 使用 git clone 时如何修复 'The project you were looking for could not be found'

git - 无法使用 Git 将文件重置为特定提交

git - 撤消还原一个分支中的更改