前言
工作中经常使用Git更新代码版本,有这样一个场景:
- 如果分支已经存在,则将其打开并更新代码
- 如果分支不存在,请创建它并打开它,然后更新代码
如果使用git checkout -b 命令,如git checkout -b foo在foo分支上打开(如果不存在,它将创建此分支),但是如果foo分支已经存在,则会引发如下错误:
fatal: A branch named 'foo' already exists.
有人推荐git checkout -B命令
git checkout -B foo
从-B手册页:
命令checkout -b创建一个新分支,然后签出(进入)到该分支。 因此,如果分支已经存在,则无法创建新分支。
相反,您需要执行以下操作:
git checkout -B <branchname>
上面的命令以上下文相关的方式执行。 如果有分支,它将切换,否则,它将创建(进入)并签出。
如果指定
-B,则创建<new_branch>(如果不存在); 否则,将被重置。 这是交易的等价物
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
如下所述,请谨慎使用它,因为它会重置分支,这并不总是可取的。
如果您确实使用此命令错误地重置了分支,则可以使用以下命令轻松地恢复到其先前的状态:
git reset HEAD@{1}
我使用以下命令来查找是否在我的存储库中存在一个本地git分支branch-name。它是否正确?有没有更好的办法?
请注意,我在脚本中这样做。
1.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
2.
git rev-parse --verify <branch_name>
# $? == 0 means local branch with <branch-name> exists.
或者
git show-ref -q --heads <branch-name>
在shell中可以这样写:
if git rev-parse --verify <branch_name>;then
存在该分支
else
不存在该分支
fi
bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令。
参考文章:
本文探讨了如何在Git中智能地检查和创建分支,避免冲突,以及正确使用`git checkout-B`命令。还介绍了检查本地分支存在的两种方法,并强调了`git reset`的潜在风险。
1002





