如果分离,则获取当前的 Git 分支名称或提交哈希

时间:2021-06-02 20:39:25

标签: git

是否有一个命令会打印当前分支(例如 master)(如果有),或者如果它被分离则打印提交哈希?目的是给我写一些东西,以便我以后可以执行 git switch <branch_or_commit> 回到我开始的地方。

这将以编程方式使用,因此无需抓取 git status、Bash 管道或其他任何内容。答案需要使用“管道”命令,这些命令可以保证其输出的格式和稳定性。

此外,我还应该指出,对于这些单独的思考,而不是一起思考,有很多问题要问。 在随意将其标记为重复之前,请三思。

以下是我尝试过的方法。最接近的实际上是 cat .git/HEAD

<头>
命令 分支上的输出 分离时输出
git rev-parse HEAD cedbe9... cedbe9...
git rev-parse --abbrev-ref HEAD master HEAD
git symbolic-ref --short HEAD master fatal: ref HEAD is not a symbolic ref
cat .git/HEAD ref: refs/heads/master cedbe9...
git branch --show-current master (无输出)
你的答案在这里 master cedbe9...

2 个答案:

答案 0 :(得分:5)

只用一个命令是不可能的,但用两个命令可能:

git symbolic-ref -q --short HEAD || git rev-parse HEAD

获取当前分支;但如果分离得到哈希值。

答案 1 :(得分:4)

<块引用>

目的是给我一些可以写下来的东西,以便我以后可以执行 git switch <branch_or_commit> 回到我开始的地方。

您需要知道返回的东西是分支名称还是提交哈希 ID,因为 git switch 要求 {使用散列 ID 时使用 {1}} 标志,但将 --detach 与分支名称一起使用会产生错误的结果。

因此,您需要知道您是否获得了一个符号名称:

--detach

及以后:

if switchname=$(git symbolic-ref -q --short HEAD); then
    detach=
else
    switchname=$(git rev-parse HEAD) || exit  # quit if unborn branch
    detach="--detach"
fi

例如。

上面有一个缺陷:如果你在一个未出生的分支上,git switch $detach $switchname 将产生分支名称,但 git symbolic-ref -q --short HEAD 将无法切换 < em>到它。运行 git switch git symbolic-ref 以检测未出生的分支情况可能是明智的。