Git-推送当前分支快捷方式


363

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

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

git push origin feature/123-sandbox-tests

这很乏味。我在寻找捷径,例如

git push origin current

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


编辑:从2.0版开始,git的默认行为已更改为更直观的行为,这是我想要实现的。有关详细信息,请参见此SO问题

编辑2ceztko的答案是最好的答案,因为无论设置如何,它都可以推送当前分支。

Answers:


701

根据git push文档:

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

所以我认为您需要的是git push origin HEADgit push -u origin HEAD如果尚未将其推送到原始位置,则在本地分支中设置上游跟踪信息也很有用。


11
与将push.default设置为simple或current相比,我更喜欢此设置,因为不同的计算机可能具有不同的设置。您可能习惯于git push仅推送当前分支,但是在其他计算机上,您可能会不小心推送所有匹配的分支。
wisbucky 2014年

1
@wisbucky我有几个别名,包括co,因此,如果我尝试甚至拉低然后~/.gitconfig在该VM上没有文件的情况下签出代码,我会立即知道。这让我对将push default更改为感到非常安全upstream
2015年

9
有趣的是,这不适用于just @,它被记录为的有效别名HEAD。(例如git push -u origin @
void.pointer 2015年

196

您可以使用以下命令将git配置为推送到当前分支

git config --global push.default current

然后做

git push 

这会将代码推送到您当前的分支。


push = refs/heads/current:refs/for/master/current在.git / config中添加到“远程”部分有意义吗?也就是说,“当前”在这里是一个特殊的词吗?还是会在寻找一个名为“当前”的分支?
大卫·多里亚

6
@DavidDoria'current'不是在这里命名的分支。
Mahesh

最好git push -u origin feature_branch_name设置上游/跟踪!如果至少使用远程存储库。
弗洛

40

您应查看“ git push”的默认行为中未指定分支的类似问题

基本上,它说明了如何设置默认行为以推动您当前执行的分支git push。您可能需要的是:

git config --global push.default current

其他选项:

  • 什么都不要:不要推任何东西
  • 匹配:推送所有匹配的分支
  • 上游 / 跟踪:将当前分支推到正在跟踪的任何位置
  • 当前:推当前分支

11

我在我的.bashrc配置中使用了这样的别名

alias gpb='git push origin `git rev-parse --abbrev-ref HEAD`'

在命令中,$gpb它采用当前分支名称并将其推送到原点。

这是我的其他别名:

alias gst='git status'
alias gbr='git branch'
alias gca='git commit -am'
alias gco='git checkout'

8

对于它的价值,最终的捷径是:

在我.bash_profile拥有的地方alias push="git push origin HEAD",因此无论何时键入,push我都知道我要推送到当前所在的分支。


6

如果您使用的是git 1.7.x,则可以运行以下命令来设置远程跟踪分支。

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

然后,您只需使用git push即可推送所有更改。要获得更完整的答案,请在此处查看对类似问题公认答案。

如果只想使用push命令来推送当前分支,则可以将推送行为更改为上游:

git config --global push.default upstream

谢谢,但是在这种情况下,不是所有的跟踪分支都被推到原点吗?
拉德

我已经修改了答案,请查看链接,那里的答案更完整。
法鲁克·沙欣

同样,问题在于所有正在跟踪的分支都以这种方式推送。正如我在问题中写道,该分支首先是一个跟踪分支,因此我认为按照您的建议设置上游分支是多余的。还是我错了?
伊拉德

然后,您可以通过更改git push行为将git配置为仅推送当前分支。git config --global push.default upstream将设置推送行为以仅推送当前分支。
Faruk Sahin 2012年

5

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

您也可以自己在配置中执行此操作,方法是设置branch.<branch name>.merge为远程分支名称(在您的情况下,与本地名称相同),还可以选择branch.<branch name>.remote设置为要推送到的远程名称(默认为源)。如果您查看配置,很可能已经为设置了其中一个master,因此可以按照该示例进行操作。

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

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

经过深思熟虑,在重新阅读您的问题时,我想您知道所有这些。我认为您真正要寻找的东西不存在。一个bash函数怎么样(未测试):

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

1

借助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
}

它将当前分支推到原点,并且还设置了远程跟踪分支(如果尚未设置)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.