2

如果我执行 git push,我会看到涉及 3 个分支。1) 我正在处理的本地分支,比如'foo1' 2) 本地远程跟踪分支'origin/foo2'(在推/拉之后总是与远程 foo3 在同一个提交上) 3) 'foo3' in远程仓库。自然通常它们都被称为 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 手册也只讨论了两个参考(refspec src 和 dst),第 1 点和第 3 点。更新远程仓库上的 dst 分支后,手册在哪里谈到了本地远程跟踪 ref 也更新了?

4

2 回答 2

1

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

您所描述的foo2是 git pull (git fetch + git merge) 或git rebase:
(from git config)

branch.<name>.merge

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

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

请注意,git1.7.10 之后,默认推送策略可能会更改为matchingupstream请参阅“什么是结果git push origin ”),这意味着,branch.<name>.merge定义一个上游分支(在没有 的情况下branch.<name>.remote),它可以默认用于一个git push

于 2012-04-08T19:46:48.903 回答
0

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

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

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

于 2012-04-08T19:50:05.253 回答