如果分支存在,是否可以将git checkout
别名git checkout
或如果不存在则git checkout -b
?
答案 0 :(得分:4)
这是一种方式。在您的用户.gitconfig
:
[alias]
magic = !sh -c 'git show-ref --verify --quiet refs/heads/\"$1\" && git checkout \"$1\" || git checkout -b \"$1\"' -
用法:git magic <branch name>
。
它的工作原理如下:
show-ref
用于检查分支是否存在。 --verify
标志用于指定确切路径,因此如果执行git show-ref --verify refs/heads/<branch name>
,则只会匹配repo本地的分支,而不匹配任何远程数据库上具有相同名称的分支:< / p>
通过要求精确的ref路径来启用更严格的引用检查。除了返回错误代码1之外,如果未指定
--quiet
,它还会打印错误消息。
--quiet
确保您没有看到任何不需要的错误消息:
不要将任何结果打印到stdout。与
--verify
结合使用时,可以使用此方法静默检查引用是否存在。
如果show-ref
以代码0退出,则分支存在,执行&&
之后的命令,检查分支。否则,show-ref
以非零状态1退出,并且&&
之后的命令不会被执行,而是||
之后的命令,这将创建一个具有该名称的新分支并检查它出来了。
$ git magic fsh.exe": declare: `_git_'git': not a valid identifier
如果您不尝试使用Tab键完成分支名称,则别名仍然可以正常工作。我发现这个Stack Overflow问题和答案可能对标签完整问题有帮助,但我不确定:Git aliases - command line autocompletion of branch names。
如果您有兴趣了解有关如何将参数传递给Git别名的更多信息,请参阅Advanced aliases with arguments中的Linux Kernel Git Wiki。
答案 1 :(得分:2)
不,如果您想将命令保留为git checkout
则不行。根据git-config man page:
为避免混淆和使用脚本的麻烦,忽略隐藏现有Git命令的别名。
其他解决方案,例如Cupcake,可以使用,但你必须接受别名的新名称。