如果分支存在或不存在git checkout
,有没有办法别名?git checkout
git checkout -b
2 回答
这是一种方法。在您的用户中进行设置.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 本地的分支,而不是任何远程上具有相同名称的分支:通过要求精确的引用路径来启用更严格的引用检查。
--quiet
除了返回错误代码 1 外,如果未指定,它还会打印错误消息。--quiet
确保您看不到任何您不需要的错误消息:不要将任何结果打印到标准输出。与
--verify
此结合使用时,可用于静默检查引用是否存在。如果
show-ref
以代码 0 退出,则分支存在,执行 after 命令&&
,检查分支。否则,show-ref
以非零状态 1 退出,并且&&
不执行 after 的命令,但之后的命令||
会创建一个具有该名称的新分支并将其签出。
但是,我应该警告,所写的别名不能很好地与分支名称的 msysgit bash 选项卡完成配合,它会导致发生以下错误,我还不确定为什么:
$ git magic fsh.exe": declare: `_git_'git': not a valid identifier
如果您不尝试使用制表符完成分支名称,则别名仍然可以正常工作。我发现这个 Stack Overflow 问题和答案可能有助于解决选项卡完成问题,但我不确定:Git aliases - command line autocompletion of branch names。
如果您有兴趣了解有关如何将参数传递给 Git 别名的更多信息,请参阅Linux Kernel Git Wiki中的带参数的高级别名。
不,如果您想将命令保留为git checkout
. 根据 git-config手册页:
为了避免脚本使用的混乱和麻烦,隐藏现有 Git 命令的别名将被忽略。
其他解决方案(例如 Cupcake 的解决方案)可能有效,但您必须接受别名的新名称。