git checkout -b foo
启用foo
分支(即使它不存在,也会创建),但如果foo
分支已经存在,则抛出如下错误:
fatal: A branch named 'foo' already exists.
执行以下检查的命令是什么?
git checkout foo
)git checkout -b foo
)答案 0 :(得分:59)
bgusach别名更安全(基于Jiří Pavelka' s answer):
switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"
git switch abranch
原始答案(2014)您可以尝试:
git checkout -B foo
如果给出
的交易等价物-B
,则创建<new_branch>
(如果它不存在);否则,它被重置。这是
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
如下所述,请谨慎使用,因为它会重置分支,这并不总是令人满意的 如果您使用此命令错误地重置了分支,you can easily revert to its previous state使用:
git reset HEAD@{1}
答案 1 :(得分:49)
同意史密斯。有同样的问题,-B
没有解决它,因为重置。他的解决方案有效,但我的解决方案看起来更简单:
git checkout foo || git checkout -b foo
这对我有用:)
修改强>
如果foo不存在则没有错误输出
git checkout foo 2>/dev/null || git checkout -b foo
答案 2 :(得分:20)
请注意isnan()
在检查之前重置现有分支这一相当重要的事实,我不相信@Ionica想要根据他的问题。
我当然没有,所以我能提出的最佳单线是:
-B
这可以成为一个方便的别名:
git checkout $(git show-ref --verify --quiet refs/heads/<branch> || echo '-b') <branch>
答案 3 :(得分:4)
命令checkout -b
创建一个新分支,然后检出该分支。因此,如果分支已经存在,则无法创建新分支。
相反,您需要这样做:
git checkout -B <branchname>
上述命令以上下文敏感的方式执行。如果有分支,则会切换,如果没有,则会创建并结帐。
答案 4 :(得分:2)
与George Pavelka的建议没有太大不同,但是它不依赖于“ git checkout”的状态,而是检查是否存在,然后决定要使用的命令
git show-branch <branch> &>/dev/null && git checkout <branch> || git checkout -b <branch>