2010-07-27 15 views
32

Estoy tratando de obtener una comprensión más completa de git.¿Qué significa realmente la salida de git pull?

¿Alguien me puede dar una explicación simple línea por línea de lo que significa la salida básica de git pull? Ejemplo:

remote: Counting objects: 11, done. 
remote: Compressing objects: 100% (5/5), done. 
remote: Total 7 (delta 2), reused 0 (delta 0) 
Unpacking objects: 100% (7/7), done. 
From ssh://my.remote.host.com/~/git/myproject 
* branch   master  -> FETCH_HEAD 
Updating 9d447d2..f74fb21 
Fast forward 
app/controllers/myproject_controller.rb | 13 +++++++++++++ 
1 files changed, 13 insertions(+), 0 deletions(-) 

Respuesta

51

Bajo el capó, git pull se git fetch seguido por git merge. Aquí está la parte de búsqueda:

remote: Counting objects: 11, done. 
remote: Compressing objects: 100% (5/5), done. 
remote: Total 7 (delta 2), reused 0 (delta 0) 

En este punto, le indicó al control remoto lo que desea. Encuentra todos los objetos que necesita para darte (contándolos en el proceso, creo), los comprime para una transferencia más rápida a través de la red y luego informa qué te está enviando. Los objetos pueden ser blobs, trees, commits o tags; consulte, por ejemplo, git book para obtener más información.

Unpacking objects: 100% (7/7), done. 

Recibes el paquete (conjunto de objetos comprimidos) y lo descomprimes.

From ssh://my.remote.host.com/~/git/myproject 
* branch   master  -> FETCH_HEAD 

Ha buscado la rama 'master' desde el control remoto; el ref FETCH_HEAD ahora lo señala. Ahora pasamos a la fusión: precisamente, git fusionará FETCH_HEAD (la rama maestra del control remoto) en su rama actual (presumiblemente maestro).

Updating 9d447d2..f74fb21 
Fast forward 

Resulta que usted no ha divergido de rama principal del control remoto, por lo que la fusión es un avance rápido (una combinación de trivial en el que simplemente se mueve hacia adelante en la historia). Git toma nota de la posición original de su rama principal (9d447d2) y la nueva posición (f74fb21) a la que se ha reenviado rápidamente. Si hubieras divergido de la rama principal del control remoto, verías el resultado de una fusión recursiva aquí: Merge made by recursive, posiblemente junto con algunos Auto-merged <file> y (¡oh, no!) Conflictos de combinación.

app/controllers/myproject_controller.rb | 13 +++++++++++++ 
1 files changed, 13 insertions(+), 0 deletions(-) 

Por último, le muestra el diffstat entre la posición original y posterior a la fusión de su rama principal; esto es básicamente lo que obtendrías de git diff --stat [email protected]{1} master.

+0

+1 "Resulta que no ha divergido de la rama principal del control remoto": ¿quiere decir que no se ha creado una nueva bifurcación? Además, ¿qué significa ++ o - significa –

+1

@Pangea y otros que podrían estar preguntándose en el futuro: No, eso no significa que no se creó una nueva rama, simplemente significa que no se realizaron cambios simultáneos que no fueron aún está incluido en la rama remota. En este caso, no hay nada que fusionar, simplemente agrega las nuevas confirmaciones en la parte superior de su sucursal local y tanto su sucursal local como su sucursal remota serán idénticas. ++ y - son simplemente representaciones "gráficas" de la cantidad de cambios en cada archivo (+ siendo inserciones y -s siendo eliminaciones) y por lo tanto le dicen más o menos a dónde fue la mayoría de los cambios. – tne