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

Try to checkout a new branch, without actually checking it out

我有一个 bash 脚本,我通过检查一个新分支来测试 git 状态是否干净,如果我不能这样做,我知道状态是不干净。然而,方便的是只尝试签出一个新分支而不是实际执行它,例如:

git checkout --dry -b temp

或者,如果有一种方法可以使用 git 状态来获取非零退出代码(如果它不干净),那也可以。

你需要更明确地表达你的意思。

即使您有未提交的修改(有时)也可以切换分支:参见 Checkout another branch when there are uncommitted changes on the current branch

总是可以创建新分支而不更改提交,这就是git checkout -b <em>name</em> 会(除非 name 命名一个现有分支,在这种情况下检出失败)。

您可以有一个处于未合并状态的索引。对此的测试是使用git write-tree:如果失败,则索引处于未合并状态。

您可以拥有一个包含与 HEAD 提交不同的文件但未处于未合并状态的索引,并且您可以拥有一个包含与其 [=15] 不同的文件的工作树=] and/or 索引副本。测试这些更复杂。

您可以拥有状态有趣的子模块。

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.

(或两者,以更明智的方式)和 return 一个非零错误代码,视情况而定。