ver tipos tag pendientes modificados log etiquetas crear commits archivos git

tipos - git ver commits pendientes



¿Cómo mostrar el primer commit por ''git log''? (5)

Tengo un proyecto que tiene una larga historia. Quiero mostrar el primer commit en git.

¿Cómo hago esto?


Respuesta corta

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

( del comentario de tiho . Como lo nota Chris Johnsen , --max-parents se introdujo después de que se publicara esta respuesta).

Explicación

Técnicamente, puede haber más de un root commit. Esto sucede cuando se combinan múltiples historias previamente independientes. Es común cuando un proyecto se integra a través de una fusión de subárbol .

El repositorio git.git tiene seis confirmaciones de raíz en su gráfico histórico (uno para cada confirmación inicial de Linus, gitk , algunas herramientas inicialmente separadas, git-gui , gitweb y git-p4 ). En este caso, sabemos que e83c516 es el único en el que probablemente estamos interesados. Es el compromiso más antiguo y el compromiso de raíz.

No es tan simple en el caso general.

Imagine que libfoo ha estado en desarrollo durante un tiempo y mantiene su historial en un repositorio Git ( libfoo.git ). Independientemente, el proyecto de "barra" también ha estado en desarrollo (en bar.git ), pero no tanto como libfoo (la confirmación con la fecha más antigua en libfoo.git tiene una fecha que precede a la confirmación con la fecha más temprana en la bar.git ). En algún momento, los desarrolladores de "bar" deciden incorporar libfoo en su proyecto utilizando una fusión de subárbol. Antes de esta fusión, podría haber sido trivial determinar el "primer" commit en bar.git (probablemente solo hubo un root commit). Sin embargo, después de la fusión, hay múltiples confirmaciones de raíz y la primera confirmación de raíz proviene de la historia de libfoo , no de "barra".

Puedes encontrar todos los root commit de la historia DAG así:

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

Para el registro, si --max-parents no estaban disponibles, esto también funciona:

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

Si tiene etiquetas útiles en su lugar, entonces git name-rev podría ofrecerle una visión general rápida del historial:

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

Prima

Usa esto a menudo? Difícil de recordar? Agrega 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


Encontre eso:

git log --reverse

muestra confirmaciones desde el inicio.


No es la forma más hermosa de hacerlo, supongo:

git log --pretty=oneline | wc -l

Esto le da un número entonces

git log HEAD~<The number minus one>


Puede revertir su lote y seguirlo para el primer resultado.

git log --pretty=oneline --reverse | head -1


git log $(git log --pretty=format:%H|tail -1)