您输入命令" git checkout foo"。
如果有一个名为" foo"但是没有该名称的文件,它切换到分支 - 如果有一个名称的文件而没有这样的分支,它会更新文件" foo"。
但我想知道---有没有办法输入命令,以便Git无条件地解释" foo"作为一个分支的名称,不管是什么?这包括(但不限制)规范,如果没有名为" foo"的分支,即使存在该名称的文件,操作也会失败。
那么 - 有没有办法做到这一点?
感谢。
答案 0 :(得分:14)
是的,从参考资料中可以看出这种用法:
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>…
在您的情况下,归结为:
git checkout foo --
此处,foo
对应<tree-ish>
,--
表示此后的任何内容都指的是文件名。因此,如果您使用上面的命令(在--
之后没有文件名),如果没有名为foo
的tree-ish(分支),它将失败:
fatal: invalid reference: foo
答案 1 :(得分:2)
刚刚检查了git 2.1.2的行为,checkout总是将名称解释为分支名称。您可以使用./foo
强制将其强制为文件。
在您的情况下,git checkout foo
将始终尝试切换到分支foo
。
如果要强制参数为分支,那么即使文件匹配它没有更新,也可以尝试使用git checkout -B foo foo
欺骗git。如果存在foo
,git会将其检出并更新分支指针。如果它没有,则不会创建新分支,因为缺少起点。
答案 2 :(得分:1)
如果分支名称首先存在,您可以添加显式检查:
git show-ref --verify --quiet refs/heads/foo && git checkout foo
这将确保分支存在,如果存在,请检查它。是的,存在竞争条件(分支可以在两者之间删除),但希望这在实践中不是问题。
Is there a better way to find out if a local git branch exists?