2013-02-27 94 views
15

我想改进当前的别名,其中大多数都在分支上工作。 有没有办法在git别名中引用当前分支,所以我不需要每次都传递它?当前分支上的Git别名

像这样的:

git config alias.po "push origin" 

是使用这样的:

git po foo_branch 

我想只要运行git po,并采取当前分支作为参数。

+2

git rev-parse --abbrev-ref HEAD是我用来驱动当前分支的东西。 – Learath2 2013-02-27 12:46:25

回答

0

这个答案将是有效的混帐2.0,其中默认的推动行为将simple

除非push.default设置为matchinggit push没有指定参数将始终推动当前分支开始,所以在这你不需要指定它。

+2

-1:我不认为这是正确的。 'git push'的默认动作取决于'.gitconfig'中的'push.default'设置。 – lunaryorn 2013-02-27 12:43:04

+0

是的,但只有它被设置为“匹配” – CharlesB 2013-02-27 12:57:16

+0

实际上'matching'是'push.default'的当前默认值,所以我改变了我的回答 – CharlesB 2013-02-27 13:00:24

0

从您的问题中,您不需要明确说明这两个别名中的哪一个。

这将推动当前已签出分支:

git config alias.po !f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git push origin $tmp_branch; unset $tmp_branch; }; f 

这将推动这个分支名称(git po branchName):

git config alias.po !f() { git push origin $1; }; f 
+1

使用'git symbolic-ref HEAD'来获取当前分支。应该更快。 – lunaryorn 2013-02-27 12:45:35

+0

@ lunaryorn为什么不'git rev-parse --abbrev-ref HEAD'?它返回分支名称没有参考 – vladkras 2016-07-06 09:21:07

2

我不知道任何内置的方式,但你可以用shell别名做:

alias gpo='git push origin "$(git-current-branch 2> /dev/null)"' 

其中git-current-branch被定义为f ollows:

git-current-branch() { 
    if ! git rev-parse 2> /dev/null 
    then 
     print "$0: not a repository: $PWD" >&2 
     return 1 
    fi 
    local ref="$(git symbolic-ref HEAD 2> /dev/null)" 
    if [[ -n "$ref" ]] 
    then 
     print "${ref#refs/heads/}" 
     return 0 
    else 
     return 1 
    fi 
} 

无耻地从Prezto无耻地采取。

34
[alias] 
    po = "!git push --set-upstream origin \"$(git rev-parse --abbrev-ref HEAD)\"" 
+0

很好的答案!唯一需要注意的是,我直接从命令行执行此操作,并将当前分支硬编码到命令行中:) Direclty在配置文件中做了它,它工作得很好。 – CubanX 2014-02-08 15:30:30

+1

为什么在'!git'中爆炸?我知道什么是爆炸 - 什么在bash中,只是不知道你为什么要在这里。 – 2014-05-22 20:14:22

+3

bang允许您执行shell中的所有内容,即允许您执行任何命令,而不仅仅是别名中的git命令。 – 2015-03-04 17:37:53

相关问题