显示git分支名称或提交ID

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我正在尝试复制我的Shell提示符在显示当前分支名称方面的行为。 我这里使用的是Fish,但大多数Shell都具有此功能。 fish prompt

如果我使用命令

git rev-parse --abbrev-ref --verify HEAD

它返回给我

主分支

很好!

现在,如果我检出旧的提交,我的提示会显示fish prompt

如果我再次运行上面的命令,它会返回

HEAD

这不是我想要的。我想要像提示一样的 3171f5a。所以我有了一个新命令。

git rev-parse --short --verify HEAD

3171f5a

很好!但是如果我回到主分支,它会给我

617ca76

你知道是否有一种命令可以直接给我输出结果,而不需要检查返回值是否为HEAD。 (缩短哈希或不缩短都可以)

非常感谢


@ChannaveerHakari 给出了输出 * (HEAD detached at 3171f5a),这是可解析的,但我会等待看看是否有其他想法。 - MadStark
请查看/etc/fish/config.fish中的function fish_prompt。它调用另一个函数来显示分支。 - ElpieKay
@ElpieKay 是的,我试过了!它似乎只显示一个名为 git_branch_name 的变量,但我找不到它的定义在哪里。很遗憾那里没有调用任何 git 命令。 - MadStark
@ElpieKay 空输出 - MadStark
echo "$PS1" 应该显示 shell 的方式 - max630
显示剩余4条评论
2个回答

5
在Shell中一行命令实现此操作的方式是使用两个独立的Git命令:
git symbolic-ref --short -q HEAD || git rev-parse --short HEAD

在“脱离HEAD”情况下,git symbolic-ref 命令失败(而 -q 参数防止其向 stderr 输出信息),随后的第二个 git rev-parse 命令会输出简化版哈希 ID。
请注意,当你处于一个未创建的分支上时,git symbolic-ref 命令会成功,你会得到该未创建分支的(简化)名称。

是的,这就是我的 shell,fish 所做的。它能够工作,足够简单,解决了我的问题。谢谢! - MadStark

0

Git提示逻辑通常被封装在一个函数中的原因是它不仅仅是一个简单的git命令。你可以使用类似以下的代码:

git log -n 1 --format="%D>%h" |cut -d'>' -f2

但是看到这个,我不禁觉得它有点脆弱(而且你可能会得到一些不想要的空白)。

在这里不使用if(或等效物)的限制可能并不完全现实。


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