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

How do you push just a single Git branch (and no other branches)?

我正在处理本地Git存储库。有两个分支:masterfeature_x

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

我的feature_x分支(feature_x分支在远程已经存在)的git push origin feature_x是否可以工作?

我不想在我的盒子上测试这个,因为我现在不能推给大师。


是的,只需执行以下操作

1
2
git checkout feature_x
git push origin feature_x


默认情况下,git push更新所有远程分支。但是,您可以配置git,使其仅将当前分支更新到其上游。

1
git config push.default upstream

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

其他有效选项包括:

  • nothing:除非明确给出了refspec,否则不要推送任何东西(错误)。这主要是针对那些希望总是直截了当地避免错误的人。
  • matching:推压两端同名的所有分支。(1.7.11版之前的默认选项)
  • upstream:将当前分支推到其上游分支机构。只有当您推送到通常要从中提取的同一存储库(即中央工作流)时,此模式才有意义。本地和远程分支不需要具有相同的名称。
  • tracking:已弃用,改用upstream
  • current:将当前分支推到接收端同名的远程分支。在中心工作流和非中心工作流中工作。
  • simple【从1.7.11版开始提供】在集中工作流中,与upstream一样工作,如果上游分支机构的名称与本地分支机构的名称不同,则增加了拒绝推送的安全性。当推到一个与你通常拉的遥控器不同的遥控器时,按current的方式工作。这是最安全的选择,适合初学者。此模式已成为Git2.0中的默认模式。


除了Karthik Bose的答案之外,还有一个小的更新——你可以在全球范围内配置Git,以影响你所有的工作区的行为:

1
git config --global push.default upstream


假设您有一个本地分支foo,一个称为origin的远程分支和一个远程分支origin/master。

要将foo的内容推送到origin/master,首先需要设置其上游:

1
2
git checkout foo
git branch -u origin/master

然后您可以使用以下方法推到此分支:

1
git push origin HEAD:master

在最后一个命令中,您可以添加--force来用foo替换源站/master的整个历史记录。