git 是否有一个命令可用于创建或 checkout 现有分支?

siv3szwd  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(128)

git switch <branch>允许我移动到现有分支。
git switch -c <branch>允许我创建一个新分支。
是否有一个命令,它将根据分支是否已经存在,创建一个新的分支或 checkout 现有的分支?

ujv3wf0j

ujv3wf0j1#

没有内置任何内容,但定义别名或编写脚本很容易:

if git show-ref --quiet "refs/heads/$branchname"; then
  git switch "$branchname";
else
  git switch -c "$branchname";
fi

或者也许

git show-ref --quiet "refs/heads/$branchname" || create=-c;
git switch ${create:+"$create"} "$branchname"

将其配置为别名:

git config --global alias.sw '!f() { if git show-ref --quiet "refs/heads/$1"; then git switch "$1"; else git switch -c "$1"; fi; }; f'

(or变式2:)

git config --global alias.sw '!f() { git show-ref --quiet "refs/heads/$1" || create=-c; git switch ${create:+"$create"} "$1"; }; f'

然后用途:

git sw branch-to-checkout-or-create
cs7cruho

cs7cruho2#

我不知道有这样的命令,但是你可以创建一个别名来完成它,在这个例子中是git cswgit show-branch将用*标记当前的分支,并显示没有分支被重置):

$ git config alias.csw '!sh -c "git switch $1 || git switch -c $1"'
$ git show-branch
* [branch-a] b
 ! [master] h
--
*  [branch-a] b
*+ [master] h
$ git csw master
Switched to branch 'master'
$ git show-branch
! [branch-a] b
 * [master] h
--
+  [branch-a] b
+* [master] h
$ git csw branch-a
Switched to branch 'branch-a'
$ git show-branch
* [branch-a] b
 ! [master] h
--
*  [branch-a] b
*+ [master] h
$ git csw branch-b
fatal: invalid reference: branch-b
Switched to a new branch 'branch-b'
$ git show-branch
! [branch-a] b
 * [branch-b] b
  ! [master] h
---
+*  [branch-a] b
+*+ [master] h

相关问题