如何只推送一个Git分支(而不推送其他分支)?

我正在一个本地git仓库工作。它有两个分支,masterfeature_x

我想将feature_x推入远程回购,但我不想推入master分支上的更改。

来自我的feature_x分支的git push origin feature_x (feature_x分支已经存在于远程)工作吗?

我不想在我的盒子上测试这个,因为我现在不能推到master。

326069 次浏览

是的,按照下面的步骤做

git checkout feature_x
git push origin feature_x

默认情况下,git push更新所有远程分支。但是你可以配置git只更新当前分支到它的上游。

git config push.default upstream

这意味着当你执行git push时,git只会更新当前的(签出的)分支。

其他有效选项包括:

  • nothing:不推任何东西(错误),除非refspec是显式给出的。这主要是为那些想要通过始终明确来避免错误的人准备的。
  • matching:推入两端有相同的名称的所有分支。(版本1.7.11之前的默认选项)
  • upstream:将当前分支推到其上游 分支。这种模式只有在你推送到你通常会从的存储库(即中心工作流程)时才有意义。
  • . 没有必要使用相同的名称用于本地和远程分支
  • tracking:已弃用,请改用upstream
  • current:将当前分支推到接收端相同的名称的远端分支。在中心和非中心工作流中工作。
  • simple:[自1.7.11版本起可用]在集中式工作流中,像upstream一样工作,如果上游分支的名称与本地分支的名称不同,则增加了拒绝推送的安全性。当推到一个与你通常从的遥控器不同的遥控器时,工作为current。这是最安全的选择,适合初学者。此模式已成为Git 2.0中的默认模式。

Karthik Bose的回答之上的小更新-你可以全局配置git,以影响你所有的工作空间的行为:

git config --global push.default upstream

假设你有一个本地分支foo,一个远程分支origin和一个远程分支origin/master。

要将foo的内容推到origin/master,你首先需要设置它的upstream:

git checkout foo
git branch -u origin/master

然后你可以使用以下命令推到这个分支:

git push origin HEAD:master

在最后一个命令中,你可以添加——force来用foo替换origin/master的整个历史。

更好的答案是

git config push.default current

upsteam可以工作,但当你在origin上没有分支时,你将需要设置上游分支。将其更改为current将自动设置上行分支并立即推送该分支。

不管你有什么配置,都要推送你当前的分支:

git push origin $(git branch --show-current)