如果我做一个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分支后,手册在哪里讨论,还更新了本地远程跟踪引用?
答案 0 :(得分:1)
你没有在git push上看到三个分支。只有两个
您所描述的foo2
用于git pull(git fetch + git merge)或git rebase
:
(来自git config
)
branch.<name>.merge
与
branch.<name>.remote
一起定义给定分支的上游分支 它告诉git fetch/git pull/git rebase
要合并哪个分支,也可以影响git push(参见push.default
) 在分支<name>
中,它告诉git fetch要在FETCH_HEAD
中标记为合并的默认refspec。该值的处理类似于refspec的远程部分,并且必须匹配从“branch.<name>.remote
”给出的远程提取的ref。合并信息由
git pull
(首先调用git fetch
)用于查找默认分支以进行合并。 如果没有此选项,git pull
默认合并所提取的第一个refspec 指定多个值以获得章鱼合并。
请注意,在 git1.7.10之后,默认推送策略可能会更改为matching
到upstream
(请参阅“What is the result of git push origin
?”),这意味着, branch.<name>.merge
定义上游分支(在没有branch.<name>.remote
的情况下),默认情况下可以使用git push
。
答案 1 :(得分:0)
你是对的,远程跟踪分支与远程仓库上的分支同名。否则会有些混乱!
因此,origin/foo3
只代表远程foo3
中的分支origin
。运行git fetch
后,它将与遥控器正确同步。请注意,在运行git pull
时,您实际上正在运行git fetch ; git merge
。
运行git push origin foo1:foo3
时,将本地分支foo1
推送到远程分支origin/foo3
。因此,在您的情况下,指定分支foo2