Tengo un proyecto que tiene una larga historia. Quiero mostrar el primer commit en git.
¿Cómo hago esto?
Tengo un proyecto que tiene una larga historia. Quiero mostrar el primer commit en git.
¿Cómo hago esto?
Respuestas:
git rev-list --max-parents=0 HEAD
( del comentario de tiho . Como Chris Johnsen se da cuenta , --max-parentsfue presentado después de que esta respuesta fue publicada).
Técnicamente, puede haber más de una confirmación de raíz. Esto sucede cuando se fusionan varias historias previamente independientes. Es común cuando un proyecto se integra a través de una fusión de subárbol .
El git.gitrepositorio tiene seis commits raíz en su gráfico de historia (uno para el commit inicial de Linus, gitk , algunas herramientas inicialmente separadas, git-gui , gitweb y git-p4 ). En este caso, sabemos quee83c516 es en lo que probablemente estamos interesados. Es tanto el commit inicial como el commit raíz.
No es tan simple en el caso general.
Imagine que libfoo ha estado en desarrollo durante un tiempo y mantiene su historia en un repositorio Git ( libfoo.git). Independientemente, el proyecto "bar" también ha estado en desarrollo (in bar.git), pero no durante tanto tiempo libfoo (el commit con la fecha más temprana en libfoo.gittiene una fecha que precede al commit con la fecha más temprana bar.git). En algún momento, los desarrolladores de "bar" deciden incorporar libfoo en su proyecto utilizando una combinación de subárbol. Antes de esta fusión, podría haber sido trivial determinar la "primera" confirmación bar.git(probablemente solo hubo una confirmación raíz). Sin embargo, después de la fusión, hay varias confirmaciones de raíz y la confirmación de raíz más antigua en realidad proviene de la historia de libfoo, no "bar".
Puede encontrar todas las confirmaciones de raíz del historial DAG de esta manera:
git rev-list --max-parents=0 HEAD
Para el registro, si --max-parentsno estuviera disponible, esto también funciona:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"
Si tiene etiquetas útiles en su lugar, entonces git name-revpodría darle una visión general rápida del historial:
git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" | git name-rev --stdin
¿Usar esto a menudo? Difícil de recordar? Agregue un alias git para un acceso rápido
git config --global alias.first "rev-list --max-parents=0 HEAD"
Ahora puedes simplemente hacer
git first
git rev-list --max-parents=0 HEADhará lo mismo, y es un poco más simple.
Encontre eso:
git log --reverse
muestra confirmaciones desde el principio.
git log --reverse -5hace ignorar --reversepor alguna razón
Puede simplemente revertir su registro y simplemente encabezarlo para el primer resultado.
git log --pretty=oneline --reverse | head -1
git log --reverseinvierte el historial, por lo que debe usarlo en head -1lugar de tail -1obtener la primera confirmación.
-nbandera cuando --reversese da.
git log $(git log --pretty=format:%H|tail -1)
git log $(git log --reverse --pretty=format:%H|head -1)
git log --format="%h" | tail -1 le da el hash de confirmación (es decir 0dd89fb ), que puede alimentar a otros comandos, haciendo algo como
git diff `git log --format="%h" --after="1 day"| tail -1`..HEAD para ver todos los commits en el último día.
git log -1.