1

如果我正在处理 repo 的一个分支,比如说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 如何知道要获取什么?

而且,为什么merge命令是

$ git merge upstream/devel

但如果我想将更改推送到我的 fork,我需要说

$ git push origin devel 

为什么在一种情况下有斜线而在另一种情况下没有?

4

1 回答 1

2

git fetch upstream devel等同于:

 git fetch upstream refs/heads/devel

您没有在 refspec 中提供目标,因此 fetch update FETCH_HEAD,如“在 git 中,如何签出远程存储库的远程分支? ”中所述。
这是一个短暂的参考,如果你做一个拉(提取+合并)使用。

git fetch upstream获取所有内容,因此没有要更新的单个 ref。


git merge必须指定合并的,在您的情况下,远程分支develupstream/devel因为上游是您更新的远程的名称,在获取后更新)
git merge devel将合并devel当前分支上的本地分支......如果您已经在devel,那将导致无操作。

git push还要指定源,这里是本地分支devel,远程目标origin(“上游仓库”),目标取决于推送策略
如果devel正在跟踪一个远程分支,并且您当前正在运行devel,那么一个简单git push的就足够了。有关更多信息,请参阅“为什么我需要显式推送新分支? ”。

于 2013-08-03T08:06:44.463 回答