【问题标题】:git push to specific branchgit推送到特定分支
【发布时间】:2013-10-09 20:42:28
【问题描述】:

即使阅读了这个问题: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

【问题讨论】:

    标签: git version-control push


    【解决方案1】:

    如果你的本地分支和远程分支是同名的,那么你可以这样做:

    git push origin branchName
    

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

    git push origin localBranchName:remoteBranchName
    

    【讨论】:

    • 这很有帮助,很难找到:)
    【解决方案2】:

    git push origin amd_qlp_tester 将为您工作。如果只是输入git push,那么当前分支的remote就是默认值。

    push 的语法如下所示 - git push <remote> <branch>。如果您在.git/config 文件中查看您的远程,您将看到一个条目[remote "origin"],它指定了存储库的url。因此,在命令的第一部分中,您将告诉 Git 在哪里可以找到该项目的存储库,然后您只需指定一个分支。

    【讨论】:

    • 谢谢:),当dit状态描述显示为路径时,你能解释一下为什么它们是两个单独的“词”,即为什么它是origin amd_qlp_testser而不是origin/amd_qlp_tester跨度>
    • 默认的“remote”是基于当前分支的配置(在这种情况下它确实是origin)。如果未设置,则将默认值(在当前版本的 git 中)推送到 : 的分支,这意味着 matching,但将来应该会改变。
    • 我有点困惑,我使用的是 v2.10,当我输入 git push 时,它会尝试推送所有跟踪的分支,这与你所说的相反(“当前分支的远程是默认值”)。
    • Git 2.x 应该使用simple 推送策略,这意味着只会推送当前分支。 blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
    • fatal: Couldn't find remote ref branch-name-here
    【解决方案3】:

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

    在您的情况下,Petr Mensik's answer 是正确的(嗯,“a”)。原因如下:

    命令 git push <em>remote</em> 在您的 .git/config 文件中查找命名的“远程”(例如,origin)。配置文件列表:

    • 远程“存在”的位置(URL 方式)(例如,ssh://<em>hostname</em>/<i>path</i>)
    • 推送的去向(如果不同)
    • 什么被推送,如果你没有说要推送什么分支
    • 运行git fetch <em>remote</em> 时获取的内容

    当你第一次克隆 repo 时——无论是什么时候——git 都会为其中的一些设置默认值。 URL 是您从中克隆的任何内容,其余的(无论是否设置)都是“合理的”默认值……或者,嗯,是它们吗?

    这些问题在于,随着时间的推移,人们对于什么是“合理的”已经改变了主意。所以现在(取决于你的 git 版本以及你是否已经详细配置了东西),git 可能会打印很多关于未来更改默认值的警告。添加“要推送的分支”的名称—amd_qlp_tester—(1) 将其关闭,(2) 只推送那个分支。

    如果你想更方便地推送,你可以这样做:

    git push origin
    

    甚至:

    git push
    

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

    至于名称origin/amd_qlp_tester 首先:这实际上是一个本地实体(保存在您的存储库中的名称),即使它被称为“远程分支”。这是 git 对“amd_qlp_tester 在哪里”的最佳猜测。 Gitupdates it when it can.

    【讨论】:

    • 感谢您的解释,我想我现在已经清楚了。我喜欢精确,所以我会坚持git push origin amd_qlp_tester,直到我需要做更高级的事情:)
    【解决方案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 的缩写 - 它们是相同的。

    【讨论】:

      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2021-05-31
      • 2011-09-10
      • 2016-07-08
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多