Especificando los arguments de la twig a git fetch, merge, and push

Si estoy trabajando en una twig de un repository, digamos devel , ¿cuál es la diferencia entre los siguientes commands? En este caso, ya he agregado un control remoto en upstream :

 $ git fetch upstream devel From github.com:meteor/meteor * branch devel -> FETCH_HEAD 

y

 $ 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 

¿Cómo sabe fetch qué get si no se especifica una twig?

Además, ¿por qué es que el command de fusión es

 $ git merge upstream/devel 

pero si quiero presionar los cambios en mi tenedor, necesito decir

 $ git push origin devel 

¿Por qué hay una barra en un caso pero no en el otro?

git fetch upstream devel es lo mismo que:

  git fetch upstream refs/heads/devel 

Usted no proporciona un destino en su refspec, por lo que la actualización de búsqueda FETCH_HEAD , como se explica en " In git, ¿cómo puedo consultar las sucursales remotas de un repository remoto? ".
Esta es una reference efímera, que se usa si haces un pull (fetch + merge).

git fetch upstream capta todo, por lo que no hay una única reference para actualizar.


git merge debe especificar el origen de la combinación, en su caso, el devel twig remota ( upstream/devel since upstream es el nombre de su control remoto actualizado, actualizado después de la recuperación)
git merge devel fusionaría el devel de la sucursal local en la sucursal actual … y si ya estás en devel , eso daría como resultado un no-op.

Pero git push también especifica la fuente, aquí un devel sucursal local, un origin destino remoto (el " repo ascendente ") y el destino depende de la política de inserción .
Si devel está rastreando una twig remota, y actualmente estás en devel , basta con un simple git push . Consulte " ¿Por qué necesito presionar explícitamente una nueva twig? " Para get más información.