我有一个bash脚本,在这里我通过签出一个新分支来测试git的状态是否干净,如果不能这样做,我知道状态不干净。但是,很方便的是只是尝试签出一个新分支,但实际上并没有这样做,例如:
git checkout --dry -b temp
或者,如果有一种方法可以使用git status获得不干净的非零退出代码,那也可以。
答案 0 :(得分:2)
您需要更清楚地表达自己的意思。
即使您有未提交的修改(有时),也可以切换分支:请参见Checkout another branch when there are uncommitted changes on the current branch。
总是可以创建新分支而无需更改提交,这就是git checkout -b name
所做的(除非 name
命名现有分支,在这种情况下,检出将失败。
您可以使索引处于未合并状态。对此的测试是使用git write-tree
:如果失败,则索引处于未合并状态。
您可以拥有一个索引,该索引包含与HEAD
提交不同的文件,但没有处于未合并状态,并且您可以拥有一个包含与其文件HEAD
不同的文件的工作树。和/或索引副本。测试这些更为复杂。
您可以拥有状态有趣的子模块。
git-sh-setup
中有几种针对这些条件的测试,位于git --exec-path
所在的git-core目录中:
. $(git --exec-path)/git-sh-setup
require_clean_work_tree "$action"
这将打印:
Cannot $action: You have unstaged changes.
或:
Cannot $action: Your index contains uncommitted changes.
(或两者,以更明智的方式),并根据情况返回非零错误代码。