git push到特定分支


101

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

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

在分支上amd_qlp_tester

您的分支比“ origin / amd_qlp_tester”提前5次提交。

等等...

所以我的分支名称是,amd_qlp_tester但是它是从主分支“分支”出来的(如果我用错了术语,那是因为我的SVN背景)。但是还有一个名字`origin / amd_qlp_testser'

那么我该如何表达我的push命令呢?

是否为以下任何一项:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push

Answers:


92

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

默认的“远程”基于当前分支的配置(在这种情况下,确实是origin)。:如果未设置,则将默认值(在git的当前版本中)推送到的分支(即)matching,但这应该会在将来更改。
torek

我有点困惑,我使用的是v2.10,当我键入v2.10时,git push它会尝试推送所有跟踪的分支,这与您所说的相反(“当前分支的远程是默认值”)。
罗伯托

Git 2.x应该使用simple推送策略,这意味着将只推送当前分支。blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik

fatal: Couldn't find remote ref branch-name-here
doug65536

111

如果您的本地分支机构和远程分支机构名称相同,则可以这样做:

git push origin branchName

如果本地和远程分支名称不同,则可以执行以下操作:

git push origin localBranchName:remoteBranchName

8

您链接到的问题的答案全都与配置git有关,以便您可以输入非常短的git push命令并使它们执行您想要的任何操作。如果您知道自己想要什么以及如何在Git-Ese中进行拼写,那很棒,但是您不熟悉git!:-)

在您的情况下,Petr Mensik的答案是正确的(“ a”)。原因如下:

该命令以您的文件为根,以查找名为“ remote”的文件(例如,)。配置文件列出:git push remote.git/configorigin

  • 远程“生存”的位置(例如,URL)(例如,)ssh://hostname/path
  • 推送到哪里(如果不同)
  • 推送什么,如果您不说要推送什么分支
  • 跑步时会获取什么 git fetch remote

第一次克隆存储库时(无论何时),git都会为其中一些设置默认值。该URL是您克隆的内容,其余的(如果已设置或未设置)都是“合理的”默认值……或者,吗?

这些问题是随着时间的流逝,人们对于“合理的”改变了主意。因此,现在(取决于您的git版本以及是否已详细配置),git可能会在将来显示很多有关默认值更改的警告。添加“要推送的分支”的名称— amd_qlp_tester—(1)将其关闭,而(2)仅推送该分支。

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

git push origin

甚至:

git push

但是这是否满足您的要求,取决于您是否同意原始默认设置合理的“早期git authors”,还是同意原始默认设置不合理的“后来的git authors”。因此,当您想要做所有的配置工作(最终)时,请查看链接到的问题(和答案)。

至于名字origin/amd_qlp_tester,首先是一个本地实体(一个名称保存在您的仓库中),即使它被称为“远程分支”。git最好的猜测是“那边在哪里amd_qlp_tester”。Git 会在可能的时候更新它


1
感谢您的解释,我想我现在说清楚了。我喜欢精确一点,所以我会坚持下去,git push origin amd_qlp_tester直到我需要做更多高级的事情
为止

2

我想添加一个更新的答案-现在我已经使用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-它们相同。

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.