Vi una respuesta a una pregunta aquí que ayuda a restaurar un archivo eliminado en git.
La solución fue
git checkout <deleting_commit>^ -- <deleted_file_path>
¿Qué hace el carácter de intercalación ( ^
)? Lo he visto en otros lugares haciendo cosas muy útiles en git. Es mágico. ¿Alguien me lo estropea y me dice lo que hace?
^
) es el carácter de escape en cmd.exe. Cada vez que intenté usarlo para ver si sería útil, en realidad no pasaba nada, lo que explica por qué los resultados nunca fueron diferentes. > _> Estúpido cmd.exe. Puedes escapar duplicándolo o citándolo:git log master^^
ogit log "master^"
Respuestas:
HEAD^
significa el primer padre de la punta de la rama actual.Recuerda que git commits puede tener más de un padre.
HEAD^
es la abreviatura deHEAD^1
, y también puede abordar,HEAD^2
etc., según corresponda.Puede llegar a los padres de cualquier compromiso, no solo
HEAD
. También puede retroceder de generación en generación: por ejemplo,master~2
significa el abuelo de la punta de la rama maestra, favoreciendo al primer padre en casos de ambigüedad. Estos especificadores pueden encadenarse arbitrariamente, por ejemplo ,topic~3^2
. Ver la respuesta relacionada a ¿Cuál es la diferencia entreHEAD^
yHEAD~
en Git?Para obtener todos los detalles, consulte la sección "Especificación de revisiones" de
git rev-parse --help
.fuente
HEAD^^^
devuelve la tercera confirmación anterior, es decir, es equivalente aHEAD~~~
?Significa "padre de". Entonces
HEAD^
significa "el padre de la CABEZA actual". Incluso puede encadenarlos:HEAD^^
significa "el padre del padre del HEAD actual" (es decir, el abuelo del HEAD actual),HEAD^^^
significa "el padre del padre del padre del HEAD actual", y así sucesivamente.fuente
El
^
(caret) también se puede usar al especificar rangos .fuente
Aquí hay una explicación visual. Supongamos que tiene una historia como esta:
Cuando la característica se fusionó en maestra,
C
se creó con dos antepasados. Git asigna estos números de antepasados. Al ancestro de la línea principalB
se le asigna 1 y al ancestro de la característicaF
se le asigna 2.Así se
C^1
refiereB
y seC^2
refiere aF
.C^
es un alias paraC^1
.Solo lo usarías alguna vez
<rev>^3
. si hubieras realizado una fusión de tres ramas.fuente
El cursor se refiere al padre de un compromiso particular. Por ejemplo, se
HEAD^
refiere al padre del comité HEAD actual. (también, seHEAD^^
refiere al abuelo).fuente
El quilate representa un desplazamiento de confirmación (primario). Entonces, por ejemplo,
HEAD^
significa "una confirmación de HEAD" yHEAD^^^
significa "tres confirmaciones de HEAD".fuente
El (^) obtiene la fuente principal del comando, es decir, HEAD ^ obtendrá el padre de HEAD.
fuente
Greg Bacon dio un gran enlace, pero es bastante denso. Los documentos introductorios de Git en línea también presentan revisiones y especificadores de rango:
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
fuente