尝试签出新分支,而不实际签出

时间:2018-07-15 23:10:10

标签: git git-checkout

我有一个bash脚本,在这里我通过签出一个新分支来测试git的状态是否干净,如果不能这样做,我知道状态不干净。但是,很方便的是只是尝试签出一个新分支,但实际上并没有这样做,例如:

git checkout --dry -b temp

或者,如果有一种方法可以使用git status获得不干净的非零退出代码,那也可以。

1 个答案:

答案 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.

(或两者,以更明智的方式),并根据情况返回非零错误代码。