如何configurationgit推动自动设置上游没有-u?

当我第一次推送本地创build的分支时,我希望git push origin自动设置上游引用。

我知道git push -u ,但是我不想去考虑是否在-u之前使用了-u或者设置了上游引用。 换句话说,我希望git push会自动将git push -u的效果git push -u到任何一个没有上游的分支上。

这可能吗? 如果它需要一个别名或实用程序脚本,那很好。

由于我不认为这是可能的使用gitconfiguration,这是你可以在bash中做什么:

 [[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push 

如果当前分支有一个远程跟踪分支,它调用git push否则它调用git push -u

注意: 新的默认推送策略“ simple ”依赖于具有上游的分支意味着:
设置一个上游分支被视为一个自愿的步骤,而不是一个隐藏的自动化步骤

当“ git push [$there] ”没有声明要推送什么内容时,我们已经使用了传统的“匹配”语义(只要已经有相同名称的分支在那里,所有分支都被发送到远程) 。

只有当当前分支设置为与远程分支集成时,我们才会使用“ simple ”语义将当前分支推送到具有相同名称的分支
有一个用户喜好configurationvariables“ push.default ”来改变这一点。


所以从androidfish的回答中 ,你可以定义一个别名,用右引号( " )转义( \" ):

 git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push" git pu origin 

Sc0ttyD 在评论中提出了以下别名:

 alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push' 

在多行中:

 alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push' 

我有同样的问题。 我发现这个别名(.gitconfig)

[alias] track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"

用法:每个新分支git track一次(目前签出)。 然后就像平常一样推:)

@VonC和@Frexuz的答案是有帮助的,但是他们的两个解决scheme都给我带来了一个错误。 用他们的答案,我拼凑了一些适合我的东西:

  [alias] pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push 

这会导致执行git push -u origin $BRANCHNAMEgit push ,这取决于是否定义了上游(属性branch.$BRANCHNAME.merge )。

在命令行中input这个别名将需要转义代码,所以使用编辑器插入到正确的文件( $HOME/.gitconfig (global) $HOME/.gitconfig .git/config (local)或/etc/gitconfig (系统))

我通过使用这个简单的Bash脚本解决了这个问题。 它不会在现有分支上工作,但是如果使用此function创build所有分支,则始终会自动设置上游分支。

 function con { git checkout -b $1 && git push --set-upstream origin $1; } 

$ 1表示你在con后传递的第一个参数,所以就像这样做:

 git checkout -b my-new-branch && git push -u my-new-branch 

…通过这样做:

 con my-new-branch 

我用有用的脚本做了一个git扩展,包括这个:

 usage: git line push Push the current branch and set an upstream if needed. 

https://github.com/jvenezia/git-line

 git fetch origin git push origin 

^这为我设置上游

只是:

 $ alias gush="git push -u origin HEAD"