将Git推送到特定分支

183

即使阅读了这个问题:git-push-current-branch,我仍然很难弄清楚我应该如何编写git push命令。正如问题链接中所提到的,文档中并不清楚。

我想使用我的“真实世界”示例。以下是我在分支顶层运行git status命令时看到的内容:

在分支amd_qlp_tester上

您的分支领先于'origin/amd_qlp_tester' 5个提交。

等等...

我的分支名称是amd_qlp_tester,但它是从主分支“派生”的(如果我术语有误,那是因为我的SVN背景)。但是也有origin/amd_qlp_testser的名称。

那么我应该如何构造我的推送命令呢?

以下哪个是正确的呢?

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push
4个回答

287

如果你的本地分支和远程分支同名,那么你只需要执行以下操作:

git push origin branchName

当您的本地分支和远程分支名称不同时,您可以这样做:

git push origin localBranchName:remoteBranchName

6
这非常有帮助,很难找到 :) - Pe Dro
我有这种情况。我有本地分支X,从本地分支Y分支出来。Y正在跟踪远程分支A。X正在跟踪远程分支B。我能从X执行git push origin A吗? - 10101101
愉快地!在推送之前先拉一下。 - Imranmadbar

118

git push origin amd_qlp_tester 将适用于您。如果您只输入 git push,则当前分支的远程将是默认值。

push 命令的语法看起来像这样 - git push <remote> <branch>。如果你在.git/config文件中查看你的远程配置,你会看到一个 [remote "origin"] 的条目,它指定了存储库的 URL。因此,在命令的第一部分中,您将告诉 Git 在哪里找到此项目的存储库,然后您只需指定一个分支即可。


谢谢您的回复:),您能解释一下为什么在dit状态描述中显示为路径时它们是两个单独的“单词”,即为什么是origin amd_qlp_testser而不是origin/amd_qlp_tester - code_fodder
默认的“remote”基于当前分支的配置(在这种情况下,它确实是origin)。如果未设置要推送的分支,则默认为:(在当前版本的git中),这意味着“matching”,但这将来可能会改变。 - torek
我有些困惑,我正在使用v2.10版本,当我输入“git push”时,它试图推送所有被跟踪的分支,与您所说的相反(“当前分支的远程是默认值”)。 - Roberto
@doug65536 你需要使用冒号指定本地到远程的映射,命令为 git push <remote> <local_branch>:<remote_branch> - Mark Langen
@PetrMensik,您曾说过:“如果只键入git push,则当前分支的远程是默认值。”这是否意味着,通过指定名称,我们可以在远程上以不同的名称命名当前分支? - Feng. Ma
显示剩余2条评论

10

你所链接的问题答案都是关于配置 Git 以便您可以输入非常短的 git push 命令,并让它们执行您想要的任何操作。如果您知道自己想要什么并且知道如何在 Git 语言中拼写,那就太好了,但是您是 Git 新手!

在您的情况下,Petr Mensik 的答案 是正确的(嗯,“一个”正确的)。以下是原因:

命令git push remote 在您的 .git/config 文件中查找名为 "remote" (例如 origin)的位置。配置文件列出了:

  • 远程主机的 URL 地址(例如 ssh://hostname/path
  • 推送到哪里(如果不同)
  • 如果没有指定要推送哪个分支,则推送什么内容
  • 运行git fetch remote时获取的内容

当您首次克隆存储库(无论何时)时,Git 会为其中一些设置默认值。URL 是您从中克隆的内容,其余部分如果设置或未设置,都是“合理”的默认值... 或者,嗯,它们是吗?

这些的问题在于,随着时间的推移,人们已经改变了他们的想法,认为什么是“合理”的。因此,现在(取决于您的 Git 版本和是否详细配置了事项),Git 可能会打印大量有关将来更改默认值的警告。添加要推送的“分支名称”-amd_qlp_tester-(1)可以让它保持安静,(2)并且只推送那个分支。

如果您想更方便地进行推送,可以使用以下方式:

git push origin

甚至可以说:

git push

但是,是否达到您想要的效果取决于您是否同意“早期git作者”认为原始默认值是合理的或者“后来的git作者”认为原始默认值不合理。因此,当您想要进行所有的配置操作(最终),请参阅您链接到的问题(和答案)。

至于第一次出现的名称origin/amd_qlp_tester:实际上这是一个本地实体(在您的存储库中保留的名称),尽管它被称为“远程分支”。这是Git对“那里的amd_qlp_tester在哪里”的最佳猜测。Git会在可能的情况下更新它


1
谢谢解释,我现在明白了。我喜欢精确,所以我会坚持使用 git push origin amd_qlp_tester 直到我需要做更高级的操作 :) - code_fodder

4
我想添加一个更新的答案-现在我已经使用git一段时间了,我发现我经常使用以下命令来进行任何推送(以原始问题为例):
  • git push origin amd_qlp_tester - 推送到名为origin的远程仓库中位于名为amd_qlp_tester的分支。
  • git push -u origin amd_qlp_tester - 与上一条命令相同,但设置了上游将本地分支链接到远程分支,这样下次您可以直接使用git push/pull如果还没有链接(只需要做一次)。
  • git push - 一旦您设置了上游,就可以使用这个较短的版本。

注意:选项-u是选项--set-upstream的简写形式-它们是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接