459

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

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

git push origin feature/123-sandbox-tests

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

git push origin current # <- example, not working

git 知道 current 是feature/123-sandbox-tests.


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

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

4

8 回答 8

861

根据git push文档:

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如果您还没有推送到原点,那么在本地分支中设置上游跟踪信息也很有用。

于 2014-01-04T14:22:39.553 回答
257

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

git config --global push.default current

然后就做

git push 

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

于 2015-06-08T10:11:18.947 回答
47

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

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

git config --global push.default current

其他选项:

  • nothing:不要推任何东西
  • 匹配:推送所有匹配的分支
  • upstream / tracking:将当前分支推送到它正在跟踪的任何地方
  • current : 推送当前分支
于 2015-05-28T06:31:41.333 回答
14

我在我的 .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'
于 2016-07-21T09:59:55.577 回答
9

对于它的价值,终极捷径:

在我的.bash_profileI have 中alias push="git push origin HEAD",所以每当我输入时,push我都知道我正在推动我所在的当前分支。

于 2015-02-28T01:06:14.067 回答
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
于 2012-12-25T15:42:22.923 回答
5

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

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

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

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

再想一想,重新阅读你的问题,我想你知道这一切。我认为你真正要找的东西并不存在。bash 函数怎么样(未经测试):

function pushCurrent {
  git config push.default upstream
  git push
  git config push.default matching
}
于 2012-12-25T15:43:05.790 回答
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
}

它将当前分支推送到原点,如果尚未设置,还设置远程跟踪分支。

于 2015-03-25T13:42:14.140 回答