git checkout -b foo在foo分支上切换(即使它不存在,也会创建),但如果foo分支已经存在,则会抛出如下错误:
git checkout -b foo
foo
fatal: A branch named 'foo' already exists.
执行以下检查的命令是什么?
git checkout foo
xjreopfe1#
2019年第三季度更新(Git 2.23):现在实际上有一个git switch command!
git switch
git switch -c aBranch
或者,如果分支已存在:
git switch aBranch
不过,您需要一个类似的别名,它尝试 first 切换到现有分支,如果失败(因为分支可能实际上 not exist),则创建它:
switchoc = "!f() { git switch $1 2>/dev/null || git switch -c $1; }; f"
注意别名的名称:switchoc(用于“切换或创建”)。正如jar在评论中指出的:任何在2021年尝试此操作的人,请注意您不能使用别名隐藏现有的git命令。由于git switch是一个git命令,所以这个别名(名为“switch“)不起作用。您必须为别名创建唯一的名称,如“switchit“或其他名称。评论中下面提到的bgusach的别名更安全(基于Jiří Pavelka的answer):
jar
git
switch
switchit
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 checkout
-B
<new_branch>
$ git branch -f <branch> [<start point>] $ git checkout <branch>
如下所述,使用时要小心,因为它会重置分支,这并不总是可取的。如果您使用此命令错误地重置了分支,请使用you can easily revert to its previous state:
git reset HEAD@{1}
idv4meu82#
同意ssmith的观点。有同样的问题,-B没有解决它,因为重置。他的解决方案有效,但我的解决方案看起来更简单:
git checkout foo || git checkout -b foo
这对我很有效:)
无错误输出iff foo不存在
git checkout foo 2>/dev/null || git checkout -b foo
iecba09b3#
请注意一个相当重要的事实,-B将在 checkout 一个现有分支之前 * 重置 * 它,根据@Ionica的问题,我不相信这是他想要的。我当然没有,所以我能想到的最好的一行代码是:git checkout $(git show-ref --verify --quiet refs/heads/<branch> || echo '-b') <branch>这可以变成一个方便的别名,如下所示:
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"
v6ylcynt4#
命令checkout -b创建一个新分支,然后 checkout 到该分支。因此,如果分支已经存在,则不能创建新分支。相反,您需要:
checkout -b
git checkout -B <branchname>
上面的命令是上下文相关的,如果有分支,它就切换,如果没有,它就创建并 checkout 。
lh80um4z5#
这与乔治的建议没有太大的不同,但是它并不依赖于“gitcheckout“的状态,而是检查是否存在,然后决定要使用的命令
git show-branch <branch> &>/dev/null && git checkout <branch> || git checkout -b <branch>
31moq8wy6#
尝试git switch foo(不带-c)。
git switch foo
-c
6条答案
按热度按时间xjreopfe1#
2019年第三季度更新(Git 2.23):现在实际上有一个
git switch
command!或者,如果分支已存在:
不过,您需要一个类似的别名,它尝试 first 切换到现有分支,如果失败(因为分支可能实际上 not exist),则创建它:
注意别名的名称:switchoc(用于“切换或创建”)。
正如
jar
在评论中指出的:任何在2021年尝试此操作的人,请注意您不能使用别名隐藏现有的
git
命令。由于
git switch
是一个git
命令,所以这个别名(名为“switch
“)不起作用。您必须为别名创建唯一的名称,如“switchit
“或其他名称。评论中下面提到的bgusach的别名更安全(基于Jiří Pavelka的answer):
原始答案(2014)您可以尝试:
从
git checkout
man page开始:如果给定
-B
,则在<new_branch>
不存在时创建;否则,它将被重置。这相当于事务性如下所述,使用时要小心,因为它会重置分支,这并不总是可取的。
如果您使用此命令错误地重置了分支,请使用you can easily revert to its previous state:
idv4meu82#
同意ssmith的观点。有同样的问题,
-B
没有解决它,因为重置。他的解决方案有效,但我的解决方案看起来更简单:这对我很有效:)
无错误输出iff foo不存在
iecba09b3#
请注意一个相当重要的事实,
-B
将在 checkout 一个现有分支之前 * 重置 * 它,根据@Ionica的问题,我不相信这是他想要的。我当然没有,所以我能想到的最好的一行代码是:
git checkout $(git show-ref --verify --quiet refs/heads/<branch> || echo '-b') <branch>
这可以变成一个方便的别名,如下所示:
v6ylcynt4#
命令
checkout -b
创建一个新分支,然后 checkout 到该分支。因此,如果分支已经存在,则不能创建新分支。相反,您需要:
上面的命令是上下文相关的,如果有分支,它就切换,如果没有,它就创建并 checkout 。
lh80um4z5#
这与乔治的建议没有太大的不同,但是它并不依赖于“gitcheckout“的状态,而是检查是否存在,然后决定要使用的命令
31moq8wy6#
尝试
git switch foo
(不带-c
)。