如果我正在处理回购的分支,请说devel
,以下命令之间有什么区别?在这种情况下,我已经添加了upstream
遥控器:
$ git fetch upstream devel
From github.com:meteor/meteor
* branch devel -> FETCH_HEAD
和
$ git fetch upstream
remote: Counting objects: 500, done.
remote: Compressing objects: 100% (230/230), done.
remote: Total 326 (delta 227), reused 187 (delta 90)
Receiving objects: 100% (326/326), 46.61 KiB, done.
Resolving deltas: 100% (227/227), completed with 87 local objects.
From github.com:meteor/meteor
* [new branch] appconfig -> upstream/appconfig
* [new branch] check-path -> upstream/check-path
248ff08..4d44a4d ctl-migrate -> upstream/ctl-migrate
2c356d2..bfb8fd3 devel -> upstream/devel
* [new branch] release-0.6.5 -> upstream/release-0.6.5
64b95a4..c0014df shark -> upstream/shark
From github.com:meteor/meteor
* [new tag] release/0.6.5-rc11 -> release/0.6.5-rc11
* [new tag] release/0.6.5-rc12 -> release/0.6.5-rc12
如果没有指定分支,fetch如何知道要获取什么?
此外,为什么合并命令是
$ git merge upstream/devel
但如果我想将更改推送到我的分支,我需要说
$ git push origin devel
为什么一个案例中有斜线而另一个案例没有?
答案 0 :(得分:2)
git fetch upstream devel
与:
git fetch upstream refs/heads/devel
您没有在refspec中提供目的地,因此提取更新FETCH_HEAD
,如“In git, how do I check out a remote repository's remote branches?”中所述。
这是一个短命的引用,如果你执行pull(fetch + merge)就会使用。
git fetch upstream
获取所有内容,因此没有单一的引用更新。
git merge
必须指定合并的来源,在您的情况下是远程分支devel
(upstream/devel
,因为上游是您更新的远程的名称,获取后更新)
git merge devel
会合并当前分支上的本地分支devel
...如果您已经在devel
,则会导致无操作。
但git push
还指定了来源,此处为本地分支devel
,远程目标origin
(“upstream repo”),目的地取决于 push policy 即可。
如果devel
正在跟踪远程分支,并且您当前在devel
,那么简单的git push
就足够了。有关详情,请参阅“Why do I need to explicitly push a new branch?”。