打开另一个分支(如果不存在则创建),而不检查是否已存在?

时间:2014-11-16 19:54:46

标签: git

git checkout -b foo启用foo分支(即使它不存在,也会创建),但如果foo分支已经存在,则抛出如下错误:

fatal: A branch named 'foo' already exists.

执行以下检查的命令是什么?

  • 如果分支已经存在,只需打开它(git checkout foo
  • 如果分支不存在,请创建它并启用它(git checkout -b foo

5 个答案:

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

来自git checkout man page

  

如果给出-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>