首页 > 解决方案 > 断言当前 HEAD 指向 master 的命令?

问题描述

我想要一个将失败的命令(使用代码 1),除非 HEAD 指向 master。

这种作品:

git diff master --quiet || (echo 'Not master' && false)

但它太严格了——如果工作树中有任何未提交的更改,它也会失败。

我如何断言HEAD指向master,忽略工作树中的任何未分级或未提交的更改?

标签: git

解决方案


考虑到 HEAD 可以直接指向一个提交(分离的头)或指向恰好与 master 尖端的提交内容匹配的某个分支,使用 diff 进行比较不会 100% 准确。另一方面,根据 docs, HEAD 只是一个包含符号引用的文件,可以直接进行比较。

test "$(cat "$(git rev-parse --git-path HEAD)")" == "ref: refs/heads/master"

或者

test "$(cat "$(git rev-parse --git-path HEAD)")" == "ref: refs/heads/master" && echo "HEAD points to master" || echo "HEAD does not point to master"

推荐阅读