1456

我使用以下命令推送到我的远程分支:

git push origin sandbox

如果我说

git push origin

这是否也会在我的其他分支中推送更改,还是只更新我当前的分支?我有三个分支masterproductionsandbox

文档对此git push不是很清楚,所以我想澄清一下。

以下git push命令准确更新了哪些分支和远程?

git push 
git push origin

origin上面是遥控器。

我知道这git push [remote] [branch]只会将该分支推送到远程。

4

12 回答 12

1700

您可以通过在 git 配置中设置 push.default 来控制默认行为。从git-config(1) 文档

push.default

定义如果命令行上没有给出 refspec,远程中没有配置 refspec,并且命令行上给出的任何选项都没有暗示 refspec,则 git push 应该采取的操作。可能的值为:

  • nothing: 不要推任何东西

  • matching: (Git 2.0 之前的默认值) 推送所有匹配的分支

    在两端具有相同名称的所有分支都被认为是匹配的。

  • upstream:将当前分支推送到其上游分支(tracking不推荐使用上游的同义词)

  • current: 将当前分支推送到同名分支

  • simple: (Git 1.7.11 新增,Git 2.0 后默认) 喜欢上游,但如果上游分支的名称与本地分支不同,则拒绝推送

    这是最安全的选择,非常适合初学者。

simple、current 和 upstream 模式适用于那些在完成工作后想要推出单个分支的人,即使其他分支尚未准备好推出

命令行示例:

查看当前配置:

git config --global push.default

要设置新配置:

git config --global push.default current
于 2009-06-04T03:02:57.790 回答
219

您可以使用 push.default 为您的 git 设置默认行为

git config push.default current

或者如果您有很多存储库并且想要所有存储库都一样

git config --global push.default current

此设置中的current意味着默认情况下,您只会在执行git push时推送当前分支

其他选项包括:

  • nothing :不要推任何东西
  • 匹配:推送所有匹配的分支(默认)
  • tracking : 将当前分支推送到它正在跟踪的任何地方
  • current : 推送当前分支

更新 - 执行此操作的新方法

从 Git 1.7.11 开始,请执行以下操作:

git config --global push.default simple

这是一个引入的新设置,其工作方式与当前相同,据传闻将从 v 2.0 开始默认为 git

于 2011-10-06T10:45:24.390 回答
207

git push origin将所有更改推送到在originAs for具有匹配远程分支的本地分支上git push

像 一样工作git push <remote><remote>当前分支的远程在哪里(或原点,如果当前分支没有配置远程)。

从手册页的示例部分git-push

于 2009-06-04T03:16:47.933 回答
52

我只是将我的代码提交到一个分支并将其推送到 github,如下所示:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments
于 2011-11-06T10:05:54.280 回答
27

以下是有关Git Push的非常方便且有用的信息: Git Push: Just the Tip

git push 最常见的用途是将本地更改推送到公共上游存储库。假设上游是一个名为“origin”的远程(如果您的存储库是克隆,则为默认远程名称)并且要更新到/来自的分支名为“master”(默认分支名称),这是通过以下方式完成的:git push origin master

git push origin会将所有本地分支的更改推送到原始远程的匹配分支。

git push origin master会将更改从本地 master 分支推送到远程 master 分支。

git push origin master:staging如果存在,会将更改从本地主分支推送到远程暂存分支。

于 2012-08-09T08:02:40.833 回答
19

(2012 年 3 月)
注意:默认的“ matching”政策可能很快会改变
(有时在 git1.7.10+ 之后)

请参阅“请讨论:当你不说要推送什么时,“git push”应该做什么?

在当前设置(即push.default=matching)下,git push不带参数将推送所有本地和远程存在的同名分支
当开发人员推送到他自己的公共存储库时,这通常是合适的,但在使用共享存储库时如果不危险,可能会令人困惑。

建议是将默认值更改为 ' upstream',即仅推送当前分支,并将其推送到 git pull 将从中拉出的分支。
另一个候选人是' current'; 这只会将当前分支推送到同名的远程分支。

到目前为止讨论的内容可以在这个线程中看到:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

之前的相关讨论包括:

要加入讨论,请将您的消息发送至:git@vger.kernel.org

于 2012-03-17T11:13:18.793 回答
18

我只是把它放在我的 .gitconfig 别名部分并喜欢它的工作原理:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

将当前分支推送到 origin withgit pub或另一个 repo with git pub repo-name。可口。

于 2010-03-15T00:50:08.213 回答
13

您可以使用命令推送当前分支

git push origin HEAD

(取自这里

于 2015-06-23T07:50:35.513 回答
11

您可以在 中更改该默认行为.gitconfig,例如:

[push]
  default = current

要检查当前设置,请运行:

git config --global --get push.default
于 2015-10-24T17:10:14.437 回答
8

git push 将尝试将所有本地分支推送到远程服务器,这可能是您不想要的。我有几个便利设置来处理这个问题:

适当地为“gpull”和“gpush”别名:

在我的 ~/.bash_profile

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

因此,执行“gpush”或“gpull”将只推送我的“当前”分支。

于 2009-06-04T02:49:08.927 回答
3

比起使用别名,我更喜欢创建 git-XXX 脚本,这样我可以更轻松地对它们进行源代码控制(我们的开发人员在他们的路径上都有一个特定的源代码控制目录来处理这类事情)。

该脚本(称为git-setpush)会将 value 的配置值设置为remote.origin.push仅推送当前分支的内容:

#!/bin/bash -eu

CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2)
NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH

echo "setting remote.origin.push to $NEW_PUSH_REF"
git config remote.origin.push $NEW_PUSH_REF

请注意,当我们使用Gerrit时,它将目标设置refs/for/XXX为推送到审查分支。它还假设 origin 是您的远程名称。

在签出分支后调用它

git checkout your-branch
git setpush

它显然也可以适应结帐,但我喜欢脚本做一件事并且做得很好

于 2012-04-19T15:55:22.627 回答
2

我已将以下函数添加到我的 .bashrc 文件中以自动执行这些任务。它执行 git push/git pull + 当前分支的名称。

function gpush()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpush
git: for current branch: push changes to remote branch;
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git push ${bname}
    set +x
  fi
}

function gpull()
{
  if [[ "x$1" == "x-h" ]]; then
    cat <<EOF
Usage: gpull
git: for current branch: pull changes from
EOF
  else
    set -x
    local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"`
    git pull ${bname}
    set +x
  fi
}
于 2014-05-22T07:43:59.510 回答