git checkout -b foo切换foo分支(即使它不存在,它被创建),但如果foo分支已经存在,它会抛出这样的错误:
fatal: A branch named 'foo' already exists.
Run Code Online (Sandbox Code Playgroud)
执行以下检查的命令是什么?
git checkout foo)git checkout -b foo)Von*_*onC 70
你可以试试:
git switch -c aBranch
Run Code Online (Sandbox Code Playgroud)
如果
git checkout给定,-B则在不存在时创建; 否则,它被重置.这是交易的等价物
switch = "!f() { git switch 1 2>/dev/null || git switch -c $1; }; f"
Run Code Online (Sandbox Code Playgroud)
如下所述,请谨慎使用它,因为它会重置分支,这并不总是令人满意的.
如果您使用此命令错误地重置了分支,则可以使用以下命令轻松恢复到之前的状态:
switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"
git switch abranch
Run Code Online (Sandbox Code Playgroud)
bgusach在评论中提到的别名更安全(基于JiříPavelka的回答):
git checkout -B foo
Run Code Online (Sandbox Code Playgroud)
Geo*_*lka 53
同意史密斯.有同样的问题,-B并没有解决它,因为重置.他的解决方案有效,但我的解决方案看起来更简单
git checkout foo || git checkout -b foo
Run Code Online (Sandbox Code Playgroud)
这对我行得通 :)
编辑
没有错误输出iff foo不存在
git checkout foo 2>/dev/null || git checkout -b foo
Run Code Online (Sandbox Code Playgroud)
ssm*_*ith 21
请注意一个相当重要的事实,-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"
Run Code Online (Sandbox Code Playgroud)
该命令checkout -b创建一个新分支,然后检出该分支.因此,如果分支已经存在,则无法创建新分支.
相反,你需要做:
git checkout -B <branchname>
Run Code Online (Sandbox Code Playgroud)
上述命令以上下文敏感的方式执行.如果有分支,则切换,如果没有,则创建并结帐.
| 归档时间: |
|
| 查看次数: |
27715 次 |
| 最近记录: |