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

git push origin sandbox

如果我说

git push origin

这是在我的其他分支中也推送更改,还是只更新我的当前分支?我有三个分支:master、production和sandbox。

git推送文档对此不是很清楚,所以我想永远澄清这一点。

下面的git push命令会准确更新哪些分支和远程?

git push 
git push origin

上面的原点是一个遥控器。

我知道gitpush[remote][branch]将只将该分支推送到远程。


当前回答

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

git config push.default current

或者如果您有许多存储库,并且希望所有存储库都相同

git config --global push.default current

这个设置中的current意味着默认情况下,您只在执行gitpush时推送当前分支

其他选项包括:

无:不要推任何东西matching:推送所有匹配的分支(默认)跟踪:将当前分支推到它正在跟踪的任何位置current:推送当前分支


更新-实现此操作的新方法

截至Git 1.7.11,请执行以下操作:

git config --global push.default simple

这是一个新的设置,其工作方式与当前相同,根据传言,它将从v2.0默认为git

其他回答

与使用别名相比,我更喜欢创建git XXX脚本,这样我可以更容易地对它们进行源代码控制(我们的开发人员都在其路径上有一个特定的源代码控制目录)。

此脚本(称为gitsetpush)将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,以将其推入审查分支。它还假定源是您的远程名称。

使用签出分支后调用

git checkout your-branch
git setpush

很明显,它也可以用来结账,但我喜欢脚本做一件事,并且做得很好

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

git push origin HEAD

(取自此处)

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

适当地别名“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”将只推送我的“当前打开”分支。

git 2.37.0中的新配置

运行以设置自动设置远程,而不是更改推送默认行为

git config --global --add --bool push.autoSetupRemote true

它与push配合得很好。默认为简单的上游

参考文献:答案推特文档犯罪

下面是关于Git推送的非常方便和有用的信息:Git推送:提示

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

gitpushorigin将把所有本地分支的更改推送到源远程的匹配分支。

gitpushoriginmaster将从本地主分支向远程主分支推送更改。

gitpushorigin-master:如果存在,staging会将更改从本地master分支推送到远程staging分支。