指定git fetch,merge和push的分支参数

时间:2013-08-03 05:42:03

标签: git branch fetch git-merge git-fetch

如果我正在处理回购的分支,请说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 

为什么一个案例中有斜线而另一个案例没有?

1 个答案:

答案 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必须指定合并的来源,在您的情况下是远程分支develupstream/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?”。