¿Cómo hacer reference a la confirmación inicial?

Tengo un script que necesita hacer reference a la confirmación inicial en un repository. git tiene la HEAD reference especial, pero no tiene la TAIL correspondiente. No puedo encontrar nada en git help rev-parse que parezca ayudarme.

Esto es lo que me gustaría hacer:

 git show TAIL 

Aquí hay una opción que tengo:

 git show `git log --reverse | if read a commit ; then echo $commit ; fi` 

Eso es bastante hacky y depende de que la salida del logging de git no cambie.

En este momento solo etiqueto el compromiso inicial y lo uso como mi refspec. Sin embargo, me gustaría lanzar una herramienta general, por lo que no es una gran opción.

No use git-log para scripting: use git-rev-list o git-log con el formatting personalizado especificado (opción "–format = <sth> ").

Hay un problema adicional con su pregunta: puede existir más de una confirmación de raíz TAIL (commit sin padres) en un repository (incluso si descontamos las twigs desconectadas, como 'html', 'man' y 'todo' en git.git repository). Esto es generalmente el resultado de unir proyectos separados en uno, o usar la fusión de subtreees de un subproyecto desarrollado por separado.

Por ejemplo, el repository git tiene 6 confirmaciones raíz: git-gui, gitk (subtree-fusionado), gitweb (fusionado, ya no desarrollado por separado), herramientas de correo git (fusionado muy temprano en el historial del proyecto) y p4-fast-export ( quizás accidental). Eso no count las raíces de 'html y' man 'branches,' convenience 'branches que contienen documentation generada previamente, y' todo 'branch con TODO list and scripts.


Puede get una list de todas las confirmaciones parentless (raíz) accesibles desde la twig actual usando:

 $ git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" 

Si tienes git 1.7.4.2 o más nuevo, puedes usar la nueva opción --max-parents :

 $ git rev-list --max-parents=0 HEAD 

git rev-list HEAD | tail -n 1 git rev-list HEAD | tail -n 1 es una opción más estable.