如何以编程方式确定是否存在未提交的更改?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

在Makefile中,如果存在未提交的更改(无论是在工作树中还是在索引中),我希望执行某些操作。最干净、最有效的方法是什么?在一种情况下,返回值为0,而在另一种情况下为非零,退出的命令符合我的目的。

我能跑git status并通过管道输出grep但我觉得一定有更好的方法。

提问于
用户回答回答于

git diff-index --quiet HEAD --
git diff-index --quiet HEAD -- || echo "untracked"; // do something about it

git diff-index HEAD ...将在没有提交的分支(例如新初始化的存储库)上失败。 我找到的一个解决办法是git diff-index $(git write-tree) .

require_clean_work_tree () {
    # Update the index
    git update-index -q --ignore-submodules --refresh
    err=0

    # Disallow unstaged changes in the working tree
    if ! git diff-files --quiet --ignore-submodules --
    then
        echo >&2 "cannot $1: you have unstaged changes."
        git diff-files --name-status -r --ignore-submodules -- >&2
        err=1
    fi

    # Disallow uncommitted changes in the index
    if ! git diff-index --cached --quiet HEAD --ignore-submodules --
    then
        echo >&2 "cannot $1: your index contains uncommitted changes."
        git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2
        err=1
    fi

    if [ $err = 1 ]
    then
        echo >&2 "Please commit or stash them."
        exit 1
    fi
}
用户回答回答于

虽然其他解决方案非常彻底,但如果想要的东西非常快速和肮脏,请尝试如下所示:

[[ -z $(git status -s) ]]

它只是检查状态摘要中是否有任何输出。

扫码关注云+社区