2012-07-26 15 views
7

Soy un usuario de Mercurial, y estoy confundido acerca del comportamiento de las sucursales remotas. Tengo una rama remota origin/dev, y quiero replicarla en una rama local dev. Lo que me gustaría es que:Git- Tracking remote branches

  • cada vez que git pull, los cambios en origin/dev se fusionan en dev
  • cada vez que git push, los cambios en dev se fusionan en origin/dev

así que creé una rama de seguimiento con

git branch --track dev origin/dev 

que, a lo mejor de m y conocimiento, debería hacer exactamente lo que necesito.

Aún así, estaba trabajando en una rama de características y emití un git pull. Más tarde, cuando emití git checkout dev he recibido el mensaje desconcertante

su rama está detrás de 'origen/master_dev' por 2 confirmaciones, y puede ser avanza rápidamente.

Parece que mi sucursal local no se actualizó después de todo. ¿Hay alguna forma de tener la rama actualizada en la remota siempre que la saque y no estoy actualmente en esa rama? Si no, ¿estoy en lo cierto al decir que git merge (sin ningún argumento) en Branch Dev es suficiente para restaurar la situación?

+0

Relacionado: [¿Cómo hacer que una rama de Git existente rastree una rama remota?] (Http://stackoverflow.com/q/520650/456814). –

Respuesta

5

El comando git pull obtiene actualizaciones de todas las sucursales remotas (es decir, actualiza todas las ramas de seguimiento remotas). Pero fusiona solo la rama actual. Este es un comportamiento predeterminado de git pull cuando no se aprobó ningún argumento.

Como usted estaba en una rama diff cuando git pull, acaba de actualizar la rama de seguimiento remoto para dev. Ahora git merge sería suficiente para actualizar su sucursal local dev.

+3

Como nota al margen, [buscar y fusionar, no tirar] (http://longair.net/blog/2009/04/16/git-fetch-and-merge/). – Shahbaz

+0

Acutally Acabo de tratar simplemente de fusionar y el resultado es 'fatal: no se especificó commit y merge.defaultToUpstream no se estableció' aunque la rama se haya creado como seguimiento – Andrea

+1

OK. Para que funcione, puedes hacer esto 'git merge remote_name/branch_name'. En su caso, 'git merge origin/master_dev'. –