2011-05-20 12 views
8

En el siguiente ejemplo, ¿hay alguna manera de saber que se produjo una fusión? Mirando el registro de git, no puedo decir que me he fusionado.¿Cómo verifico el registro de git para una combinación de "avance rápido"?

# setup example directory 
$ mkdir test 
$ cd test 
$ git init 
$ touch a 
$ git add a 
$ git commit -m "1" 

# switch to different branch 
$ git checkout -b topic 
$ touch b 
$ git add b 
$ git commit -m "2" 

# go back to master and merge 
$ git checkout master 
$ git merge topic 

# git log 

commit cccc64de3947828f487a8ce3c3e72b0f68dc88c3 
Author: none 
Date: Fri May 20 05:54:45 2011 -0700 

    2 

commit a5d57454295759609d91a60219002e74016eed2b 
Author: none 
Date: Fri May 20 05:54:29 2011 -0700 

    1 

Respuesta

12

En ese caso, GIT ha detectado que es posible hacer una llamada de combinación de "avance rápido", ya que la rama que está en la fusión ya contiene todo en la rama actual - no lo hace necesita crear un nuevo compromiso en el gráfico de compromiso para unir las dos ramas.

Si no te gusta que el comportamiento, y desea crear una combinación de comprometerse, incluso cuando el avance rápido es posible, debe fundirse en la otra rama con:

git merge --no-ff topic 

Sin embargo, si realmente Necesita saber si una fusión sucedió o no, puede encontrar esa información en el "reflog". Por ejemplo, en su situación, git reflog produciría el siguiente resultado:

1eecbcb [email protected]{0}: merge topic: Fast-forward 
193ae5e [email protected]{1}: checkout: moving from topic to master 
1eecbcb [email protected]{2}: commit: 2 
193ae5e [email protected]{3}: checkout: moving from master to topic 
193ae5e [email protected]{4}: commit (initial): 1 

... el que se muestra cómo HEAD ha cambiado recientemente, y qué acción causado que eso ocurra. Sin embargo, confiar en el reflog es generalmente una mala idea, excepto en situaciones particulares, como la recuperación de errores: es mejor pensar en términos del gráfico de compromiso y hacer que represente lo que ha hecho. git merge --no-ff es uno de esos métodos que gusta a muchas personas.

+0

Gracias, eso es muy útil. Parece que git reflog solo muestra mi actividad local. Estoy usando GitHub. ¿Hay alguna manera de saber si alguien más hizo una fusión de avance rápido? – Ravi

+0

@suravi no, a menos que te lo dijeran. Una fusión de avance rápido es como ninguna fusión en absoluto. – hobbs

+0

Gracias es muy útil, pero como dijiste, la fusión con avance rápido ocurre cuando ambos códigos de sucursal son los mismos ¿no? – Aabid

0

Si le gustaría probar un caso donde se tiene una fusión real, puede ejecutar los siguientes comandos después de git checkout master:

touch c 
git add c 
git commit -m "3" 
git merge topic 

Es decir, se agrega una confirmación a la rama principal. Luego, el gráfico de commits ya no es una secuencia lineal, y los datos deben fusionarse desde múltiples ramas.

1

Puede utilizar git merge-base:

git merge-base master topic 

se mostrará el cccc64de3947828f487a8ce3c3e72b0f68dc88c3 (2) comete

O puede utilizar:

git show $(git merge-base master topic) 
+0

Una buena manera de averiguar dónde ocurrió una fusión, pero no ayuda mucho con el _if_, porque no sabría el nombre de la rama de tema en ese caso. –

Cuestiones relacionadas