是否有一个命令会打印当前分支(例如 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... |
答案 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
以检测未出生的分支情况可能是明智的。