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


247

我正在本地git存储库上工作。有两个分支,masterfeature_x

我想推feature_x送到远程仓库,但是我不想推送master分支上的更改。

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

我不想在我的盒子上进行测试,因为我现在无法推动掌握。


在这里:远程和这里:将分支推送到github听起来像是可行的。
al。

Answers:


376

是的,只需执行以下操作

git checkout feature_x
git push origin feature_x

54
使用现代的git,您应该能够简单地“ git push origin HEAD”,甚至“ git push HEAD”来仅推送当前已签出的分支。
2009年

2
是否有必要签出到feature_x?
hd。

5
是的,因为如果您在master上,它将尝试将本地master分支推送到远程feature_x分支。不必先结帐,您就必须做“ git push origin feature_x:feature_x”
cpjolicoeur 2012年

1
我在其他问题(例如:这里)中看到了@cpjolicoeur git push -u origin <branch-name>。但是您没有提及它。有必要吗 ?
riroo

3
@miss_R 命令-u上的选项git-push将设置上游参考,以跟踪刚刚推送的分支。这将使git-pull将来在该分支上的事情已经知道要从哪个分支拉出而无需指定它。推送单个分支不是必需的,但是由于许多人确实希望使本地分支跟踪他们正在推送的远程分支,因此被广泛使用。
cpjolicoeur

74

默认情况下,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中的默认模式。

2
谢谢,这current是我一直在寻找的东西,默认情况下git pushfoo分支中会将其推送到origin/foo分支。
多利安

@Dorian谢谢,我同意current默认情况下更有意义。
佐尔坦

@ Dorian,@Zoltán-我觉得simple默认值更有意义。我已将答案更新为“何时使用”。请看看。
Karthik Bose

1
注意:自git版本2起,默认值已更改为simple
Danijel

8

Karthik Bose的答案之上进行次要更新-您可以全局配置git,以影响所有工作区的行为:

git config --global push.default upstream

上游wasnt认可对我来说是有效设置,只好把“当前”,而不是
草蜢

-2

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

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

git checkout foo
git branch -u origin/master

然后,您可以使用以下命令推送到该分支:

git push origin HEAD:master

在最后一个命令中,您可以添加--force以将foo /的原始历史记录/主记录替换为完整的历史记录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.