git checkout -b foo
在foo
分支上打开(即使它不存在,它也会被创建),但是如果foo
分支已经存在,它会引发如下错误:
fatal: A branch named 'foo' already exists.
以下命令检查什么命令?
- 如果分支已经存在,只需打开它(
git checkout foo
) - 如果该分支不存在,则创建它并打开它(
git checkout -b foo
)
Answers:
更新Q3 2019(Git 2.23):现在实际上是一个git switch
命令!
git switch -c aBranch
但是,您将需要一个类似的别名:
switch = "!f() { git switch $1 2>/dev/null || git switch -c $1; }; f"
以下注释中提到的bgusach别名更安全(基于JiříPavelka的回答):
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>
如下所述,请谨慎使用它,因为它会重置分支,这并不总是可取的。
如果您确实使用此命令错误地重置了分支,则可以使用以下命令轻松恢复到其先前的状态:
git reset HEAD@{1}
-B
将重置分支,请参阅我的答案以找到(更长的...)替代方案。
同意史密斯。遇到相同的问题,-B
但没有解决,请重置。他的解决方案有效,但是我的解决方案看起来更简单:
git checkout foo || git checkout -b foo
这对我行得通 :)
编辑
没有错误输出iff foo不存在
git checkout foo 2>/dev/null || git checkout -b foo
switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"
注意-B
将重置的相当重要的事实在签出之前现有分支,根据他的问题,我不认为@Ionica希望这样做。
我当然没有,所以我能想到的最好的一线是:
git checkout $(git show-ref --verify --quiet refs/heads/<branch> || echo '-b') <branch>
可以将其设置为方便的别名,如下所示:
[alias]
# git cob <branch>
cob = "!f() { git checkout $(git show-ref --verify --quiet refs/heads/\"$1\" || echo '-b') \"$1\"; }; f"
该命令checkout -b
创建一个新分支,然后签出到该分支。因此,如果分支已经存在,则无法创建新分支。
相反,您需要执行以下操作:
git checkout -B <branchname>
上面的命令以上下文相关的方式执行。如果有分支,它将切换,如果没有,它将创建并签出。
git
老师!:-)在4分钟内接受。