【问题标题】:Specify the 'origin/master' part in a git push在 git push 中指定 'origin/master' 部分
【发布时间】:2012-04-21 08:04:50
【问题描述】:

如果我执行 git push,我会看到涉及 3 个分支。 1)我正在处理的本地分支,比如'foo1' 2)本地远程跟踪分支'origin/foo2'(在推/拉之后总是与远程foo3在同一个提交上)3)'foo3'在远程仓库。自然通常它们都被称为 foo,但我想要不同的名称,以便我可以正确理解 git 并在这里提出这个问题。我不明白在哪里可以指定 foo2。当我这样做时

git push origin foo1:foo3

并在我的 .git/config 中拥有它

[branch "master"]
remote = origin
merge = refs/remotes/origin/foo2

第 1 点和第 3 点没问题,但我的本地仓库中没有 origin/foo2。我错过了什么?或者是我的远程跟踪分支的答案总是与遥控器完全相同 - 这对我来说很好 - 我只是想正确理解 git。

在我的示例中,git-push 手册也只讨论了两个 ref(refspec src 和 dst),第 1 点和第 3 点。更新远程仓库上的 dst 分支后,手册在哪里谈到了本地远程跟踪 ref 也更新了?

【问题讨论】:

  • @VonC 的回答是正确的(当然:-))。我怀疑这里的根本问题是你在pushpull 之间明显的对称性上绊倒了。这是一个错误的对称。 push 的反义词不是pull,而是fetch。 (即使那样它们也不是完全对称的。)记住这一点,一切都应该更有意义。

标签: git push git-branch remote-branch


【解决方案1】:

你在 git push 上看不到三个分支。只有两个

您描述的foo2 用于 git pull (git fetch + git merge) 或 git rebase:
(来自git config

branch.<name>.merge

branch.&lt;name&gt;.remote 一起定义给定分支的上游分支。
它告诉git fetch/git pull/git rebase 要合并哪个分支,并且还会影响 git push(请参阅push.default)。
当在分支 &lt;name&gt; 中时,它告诉 git fetch 默认的 refspec 被标记为在 FETCH_HEAD 中合并。该值的处理方式类似于 refspec 的远程部分,并且必须与从“branch.&lt;name&gt;.remote”给出的远程获取的 ref 匹配。

git pull(最初调用git fetch)使用合并信息来查找用于合并的默认分支
如果没有这个选项,git pull 默认会合并第一个获取的 refspec。
指定多个值以获得章鱼合并。

请注意,在 git1.7.10 之后,默认推送策略可能会从 matching 更改为 upstream(参见“What is the result of git push origin?”),这意味着,branch.&lt;name&gt;.merge 定义了一个 upstream 分支(在没有branch.&lt;name&gt;.remote 的情况下),它可以默认用于git push

【讨论】:

    【解决方案2】:

    你是对的,远程跟踪分支与远程仓库上的分支同名。否则会有些混乱!

    所以,origin/foo3 只是代表远程origin 中的分支foo3。运行git fetch 后,它将与遥控器正确同步。请注意,在运行git pull 时,您实际上是在运行git fetch ; git merge

    运行git push origin foo1:foo3 时,您将本地分支foo1 推送到远程分支origin/foo3。因此,在您的情况下,指定分支 foo2 是没有意义的。

    【讨论】:

    • 看,我可以做到git checkout -b foo1; git pull origin foo3:remotes/origin/foo2。因此,在拉取场景中,我现在正好拥有我的问题中描述的 3 个分支。这里可能是为了具体化 3 个分支中的每一个。所有三个 can 都有不同的名称,即使这可能没有意义。但不知何故,反过来,只能影响 foo1 和 foo3 (git push origin foo1:foo3),而不再影响 foo2,这完全让我感到困惑;我不明白这种不对称性。我确定我错过了什么。
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2012-09-09
    • 2015-12-08
    • 2017-09-21
    • 1970-01-01
    • 2011-08-07
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多