¿Qué significa FETCH_HEAD en Git?

git pull --help dice:

En el modo predeterminado, git pull es una abreviatura de git fetch, seguida de git merge FETCH_HEAD.

¿Qué es este FETCH_HEAD , y qué se fusionó realmente durante git pull ?

141
11 февр. establecido por Misha Moroshko el 11 de febrero. 2012-02-11 05:35 '12 a las 5:35 am 2012-02-11 05:35
@ 5 respuestas

FETCH_HEAD es una referencia de corta duración para rastrear lo que se acaba de extraer de un repositorio remoto. git pull first calls git fetch , en casos normales extrae una rama de una remota; FETCH_HEAD apunta a la punta de esta rama (almacena la confirmación SHA1 como lo hacen las ramas). git pull luego llama a git merge , fusionando FETCH_HEAD en la rama actual.

El resultado es exactamente lo que espera: la confirmación en la parte superior de la rama remota correspondiente se combinará con la solución al final de la rama actual.

Esto es un poco como git fetch sin argumentos (o git remote update ), actualizando todas sus sucursales remotas, y luego ejecutando git merge origin/<branch> , pero utilizando FETCH_HEAD lugar de una referencia a cualquier ref. Llama cosas.

138
11 февр. La respuesta la da Jefromi el 11 de febrero. 2012-02-11 06:11 '12 a las 6:11 am 2012-02-11 06:11

FETCH_HEAD es una referencia al final de la última muestra, independientemente de si la muestra se inició directamente mediante el comando de extracción o como parte de una extracción. El valor actual de FETCH_HEAD se almacena en la carpeta .git en un archivo con el nombre, lo has adivinado, FETCH_HEAD .

Por lo tanto, si emito:

 git fetch https://github.com/ryanmaxwell/Fragaria 

FETCH_HEAD puede contener

border=0
 3cfda7cfdcf9fb78b44d991f8470df56723658d3 https://github.com/ryanmaxwell/Fragaria 

Si tengo un repositorio remoto configurado como una rama de seguimiento remoto, puedo seguir mi muestreo combinando la rama de seguimiento. Si no hago esto, puedo fusionar la punta de la última muestra directamente usando FETCH_HEAD.

 git merge FETCH_HEAD 
10
10 дек. Respuesta dada por Jonathan Mitchell el 10 de diciembre. 2012-12-10 14:37 '12 a las 2:37 pm 2012-12-10 14:37

Acabo de abrir y usé FETCH_HEAD. Necesito una copia local de algún software del servidor, y lo hice

 git fetch gitserver release_1 

gitserver es el nombre de mi máquina donde se almacenan los repositorios de git. release_1 es la etiqueta para la versión de software. Para mi sorpresa, no se encontró release_1 en ningún lugar de mi máquina local. Tuve que marcar

  git tag release_1 FETCH_HEAD 

para completar la copia de cadenas de cadenas con etiquetas (release_1) desde un repositorio remoto a uno local. Esta es una ilustración práctica de lo que es FETCH_HEAD y cómo se puede usar, y puede ser útil para otra persona, preguntándose por qué git fetch no está haciendo lo que usted espera ingenuamente.

2
08 сент. la respuesta la da el usuario 3070485 08 sep . 2014-09-08 12:30 '14 a las 12:30 2014-09-08 12:30

Como se mencionó en la respuesta de Jonathan , FETCH_HEAD corresponde al .git/FETCH_HEAD . Como regla general, el archivo se verá así:

 71f026561ddb57063681109aadd0de5bac26ada9 branch 'some-branch' of <remote URL> 669980e32769626587c5f3c45334fb81e5f44c34 not-for-merge branch 'some-other-branch' of <remote URL> b858c89278ab1469c71340eef8cf38cc4ef03fed not-for-merge branch 'yet-some-other-branch' of <remote URL> 

Tenga en cuenta que todas las sucursales menos una están marcadas como not-for-merge . Odd es una rama que fue verificada antes de ser extraída. En conclusión: FETCH_HEAD básicamente corresponde a la versión remota de la rama que se está probando actualmente.

2
07 авг. La respuesta la da Carsten Führmann 07 ago. 2017-08-07 12:36 '17 a las 12:36 pm 2017-08-07 12:36

git pull es una combinación de extracción seguida de una fusión. Cuando se produce git fetch, se da cuenta de la confirmación principal de lo que se recuperó en FETCH_HEAD (solo el archivo con este nombre en .git) y estas confirmaciones se combinan en su directorio de trabajo.

1
11 февр. la respuesta es dada por manojlds 11 feb. 2012-02-11 05:45 '12 a las 5:45 2012-02-11 05:45

Otras preguntas sobre tags o Haz una pregunta