重新映射git checkout到git checkout -b或git checkout

时间:2013-08-02 00:20:50

标签: git bash shell

如果分支存在,是否可以将git checkout别名git checkout或如果不存在则git checkout -b

2 个答案:

答案 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>

它的工作原理如下:

  1. show-ref用于检查分支是否存在。 --verify标志用于指定确切路径,因此如果执行git show-ref --verify refs/heads/<branch name>,则只会匹配repo本地的分支,而不匹配任何远程数据库上具有相同名称的分支:< / p>

      

    通过要求精确的ref路径来启用更严格的引用检查。除了返回错误代码1之外,如果未指定--quiet,它还会打印错误消息。

    --quiet确保您没有看到任何不需要的错误消息:

      

    不要将任何结果打印到stdout。与--verify结合使用时,可以使用此方法静默检查引用是否存在。

  2. 如果show-ref以代码0退出,则分支存在,执行&&之后的命令,检查分支。否则,show-ref以非零状态1退出,并且&&之后的命令不会被执行,而是||之后的命令,这将创建一个具有该名称的新分支并检查它出来了。

  3. 但是,我应该警告,所写的别名与msysgit bash选项卡完成分支名称不一致,它会导致以下错误发生,我不知道为什么会这样:

    $ 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,可以使用,但你必须接受别名的新名称。