是否有一个快捷方式告诉Git将当前跟踪分支推到原点? 注意:我知道我可以更改默认的推送行为,但我正在寻找一个不更改默认行为的临时解决方案。

例如,假设我正在使用分支feature/123-sandbox-tests

git push origin feature/123-sandbox-tests

这很乏味。我在找捷径,就像

git push origin current # <- example, not working

git知道当前是feature/123-sandbox-tests。


编辑:从2.0版开始,git的默认行为已经变成了更直观的行为,这是我想要实现的。详见这个SO问题。

编辑2:ceztko的答案是最好的答案,因为它允许推送当前分支,不管设置如何。


当前回答

如果你使用的是git 1.7。X时,可以执行如下命令设置远程跟踪分支。

git branch --set-upstream feature/123-sandbox-tests origin/feature/123-sandbox-tests

然后你可以简单地使用git push来推送所有的更改。要获得更完整的答案,请在这里查看类似问题的公认答案。

如果你只想用push命令推送当前分支,那么你可以将push行为更改为upstream:

git config --global push.default upstream

其他回答

根据git推送文档:

git push origin HEAD
    A handy way to push the current branch to the same name on the remote.

我认为你需要的是git push origin HEAD。如果你还没有推送到原点,git push -u origin HEAD在本地分支中设置上游跟踪信息也很有用。

你应该看看“git push”的默认行为中没有指定分支的类似问题

基本上,它解释了如何设置默认行为来推送你的当前分支,只执行git push。可能你需要的是:

Git配置——global push.default current

其他选项:

不要推任何东西 matching:推送所有匹配的分支 upstream/tracking:将当前分支推到它正在跟踪的位置 current:推当前支路

最简单的方法:运行git push -u origin feature/123-sandbox-tests一次。这将以您习惯的方式推动分支,并在本地配置中设置上游跟踪信息。在此之后,您可以将跟踪的分支推到它们的上游远程。

你也可以在配置中通过设置分支来做到这一点。> <分支的名字。合并到远程分支名称(在您的情况下与本地名称相同),并可选地合并到分支。> <分支的名字。远程到您想要推到的远程的名称(默认为origin)。如果你查看你的配置,很可能已经有一个master设置,所以你可以按照这个例子来做。

最后,确保您考虑了push.default设置。它默认为“匹配”,这可能会产生不希望看到的和意想不到的结果。我认识的大多数人认为“上游”更直观,它只推动当前的分支。

这些设置的详细信息可以在git-config手册页中找到。

仔细想想,再看一遍你的问题,我想你是知道这些的。我觉得你真正要找的东西并不存在。这样一个bash函数怎么样(未经测试):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}

不管怎样,终极捷径是:

在我的.bash_profile中,我有别名push="git push origin HEAD",所以每当我输入push时,我知道我正在推到我所在的当前分支。

在ceztko的回答的帮助下,我写了这个小的帮助函数,让我的生活更简单:

function gpu()
{
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} > /dev/null 2>&1; then
        git push origin HEAD
    else
        git push -u origin HEAD
    fi
}

它将当前分支推到原点,如果还没有设置远程跟踪分支,也会设置它。