【发布时间】:2013-08-02 09:35:42
【问题描述】:
如果分支存在,有没有办法将git checkout 别名为git checkout,如果不存在,则将git checkout -b 别名化?
【问题讨论】:
-
没有。或者,不容易。您当然可以将
checkout别名为复杂的 shell 函数,但是每次输入错误都会得到一个新分支,从而导致混乱,尤其是在您没有立即注意到的情况下。
如果分支存在,有没有办法将git checkout 别名为git checkout,如果不存在,则将git checkout -b 别名化?
【问题讨论】:
checkout 别名为复杂的 shell 函数,但是每次输入错误都会得到一个新分支,从而导致混乱,尤其是在您没有立即注意到的情况下。
这是一种方法。在您的用户 .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 本地的分支,而不是任何远程上具有相同名称的分支:
通过要求精确的引用路径来启用更严格的引用检查。除了返回错误代码 1 外,如果未指定
--quiet,它还会打印错误消息。
--quiet 确保您看不到任何您不需要的错误消息:
不要将任何结果打印到标准输出。当与
--verify结合使用时,它可用于静默检查引用是否存在。
如果show-ref以代码0退出,则分支存在,执行&&之后的命令,检出分支。否则,show-ref 以非零状态 1 退出,&& 之后的命令不会执行,但|| 之后的命令会执行,它会创建一个具有该名称的新分支并将其签出。
但是,我应该警告,所写的别名不能很好地与分支名称的 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 中的 Advanced aliases with arguments。
【讨论】:
A && B || C,如果A 计算为1 我相信B 被执行,而如果它计算为@987654344 @ 跳到评估 C,因为已知 A && B 已经是假的。我认为你必须交换你的 B 和 C 语句。
不,如果您想将命令保留为git checkout,则不是。根据 git-config man page:
为避免在使用脚本时出现混淆和麻烦,隐藏现有 Git 命令的别名将被忽略。
其他解决方案(例如 Cupcake 的解决方案)也可以,但您必须接受别名的新名称。
【讨论】: