在 Git 中,我应该如何确定当前的版本?

210

我只是想知道我当前的版本号是多少。


我在寻找获取当前版本以便在后续的git命令中使用时,发现了这个问题。但是当我阅读答案时,我明白了:“哦,等等,其实我不需要它,我可以直接使用HEAD。” - Antoine Pinsard
6个回答

290

“version number”是什么意思?通常会给提交标记一个版本号,然后使用。

$ git describe --tags

要确定相对于任何标签的当前 HEAD。如果您想知道当前 HEAD 的哈希值,您可能需要:

$ git rev-parse HEAD

或者对于短的修订哈希:

$ git rev-parse --short HEAD

通常只需要这样做:

$ cat .git/refs/heads/${branch-main}

但这并不可靠,因为引用可能已经被压缩。


8
参考文献可能被打包在.git/packed-refs中,因此您应该避免直接访问.git/refs/。只需使用git rev-parse master(或者如果您需要完全明确,则使用git rev-parse refs/heads/master)。 - Chris Johnsen
git describe 就是我在寻找的东西。谢谢! - Max Coplan

125

有很多方法,但我认为git log -1是最简单、最常见的


1
如何将文件变成先前的版本? - TIMEX
1
也许您想要使用以下命令:git checkout HEAD^ -- 文件名 - manojlds
2
顺便说一下,这提供的不仅仅是当前版本,您还需要相应地解析它(因此,我认为这不是最好/最容易/最常见的解决方案)。 - RAM237
我真的很困惑:如果我使用 git log -1,我会看到哈希值和当前的 git 标签: git log -1 commit 555f2ab5d8bfe06d7ab17e87b6c331ef6a735fd9 (HEAD -> main, tag: mytag-01) Author: xx xx xxxxx@xxx.xx Date: Fri Jan 7 17:53:22 2022 +0100但是如果我用单词 commit 的第一行进行 grep,我只能得到哈希值? git log -1| grep commit commit 555f2ab5d8bfe06d7ab17e87b6c331ef6a735fd9 - karsten
添加选项--decorate很有用,这样如果我将结果传输到另一个shell命令中,例如git log -1 --decorate | grep commit(添加了标记字符串的第一行),则字符串(HEAD -> main,tag:mytag-01)也会输出。 - karsten

48

这只给你这个修订版本。

git rev-parse HEAD

我认为这是最好的答案,因为它不依赖于具体实现。William的答案 "cat .git/refs/heads/master" 可以提供相同的值,但是如果实现发生变化,未来不一定能够正常运行。 - Thagomizer
同意,这是最好的答案。简要提到--short选项会使其完美无缺。 - Bobby Jack

19

这将为您提供哈希的前几位数字,它们足够独特,可用作版本号。

git rev-parse --short HEAD

4

以下内容适用于任何之前推送的版本,而不仅仅是最新版本

获取简略的版本哈希:

git log -1 --pretty=format:%h

对于长的修订哈希值:

git log -1 --pretty=format:%H

0

为了简单地输出包含版本号的当前提交,我使用以下代码:

git show $(git rev-parse HEAD)

从那里我可以按需解析输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接