¿Cómo determinar cuándo se creó una twig de Git?

¿Hay alguna forma de determinar cuándo se creó una twig de Git? Tengo una sucursal en mi repository y no recuerdo haberlo creado y pensé que quizás ver la timestamp de la creación me refrescaría la memory.

Utilizar

  git show --summary `git merge-base foo master` 

Si prefieres verlo en context, utiliza

  gitk --all --select-commit = `git merge-base foo master` 

Captura de pantalla

Tal como se explica en los comentarios y en la respuesta de Jackub , siempre que su sucursal sea más joven que la cantidad de días establecida en la configuration de configuration gc.reflogexpire (el valor pnetworkingeterminado es 90 días), puede utilizar su reflog para averiguar cuándo reference de la twig se creó por primera vez.

Tenga en count que git reflog puede tomar la mayoría de las git reflog git log . Además, tenga en count que los selectores de styles HEAD@{0} son efectivamente nociones de time y, de hecho, se manejan (de una forma pirateada) como cadenas de dates. Esto significa que puede usar el indicador --date=local y get un resultado como este:

  $ git reflog --date = local
 763008c HEAD @ {Fri ago 20 10:09:18 2010}: pull: Avance rápido
 f6cec0a HEAD @ {mar 10 de agosto 09:37:55 2010}: pull: Avance rápido
 e9e70bc HEAD @ {Thu 4 de febrero 02:51:10 2010}: pull: Avance rápido
 836f48c HEAD @ {Jue 21 ene 14:08:14 2010}: checkout: pasar de maestro a maestro
 836f48c HEAD @ {Jue 21 de enero 14:08:10 2010}: pull: Avance rápido
 24bc734 HEAD @ {Mié 20 de ene. 12:05:45 2010}: checkout: mudanza de 74fca6a42863ffacaf7ba6f1936a9f228950f657 
 74fca6a HEAD @ {Mié 20 de enero, 11:55:43 2010}: checkout: pasar de master a v2.6.31
 24bc734 HEAD @ {Mié 20 de enero 11:44:42 2010}: pull: Avance rápido
 964fe08 CABEZA @ {lun 26 de octubre 15:29:29 2009}: checkout: pasar de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
 4a6908a HEAD @ {Lun 26 Oct 14:52:12 2009}: checkout: pasar de master a v2.6.28

También puede ser útil a veces usar --date=relative :

  $ git reflog --date = relativo
 763008c HEAD @ {hace 4 semanas}: pull: Avance rápido
 f6cec0a HEAD @ {hace 6 semanas}: pull: Avance rápido
 e9e70bc HEAD @ {hace 8 meses}: pull: Avance rápido
 836f48c HEAD @ {hace 8 meses}: checkout: pasar de maestro a maestro
 836f48c HEAD @ {hace 8 meses}: pull: Avance rápido
 24bc734 HEAD @ {hace 8 meses}: checkout: pasar de 74fca6a42863ffacaf7ba6f1936a9f228950f657 al máster
 74fca6a HEAD @ {hace 8 meses}: checkout: pasar de master a v2.6.31
 24bc734 HEAD @ {hace 8 meses}: pull: Avance rápido
 964fe08 HEAD @ {hace 11 meses}: checkout: pasar de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 al máster
 4a6908a HEAD @ {11 months ago}: checkout: pasar de master a v2.6.28

Una última nota: el --all flag (que en realidad es un git-log flag entendido por git-reflog) mostrará los reflogs para todos los refs conocidos en refs/ (en lugar de simplemente, HEAD ) que le mostrará los events de sucursal claramente:

  git reflog --date = local --todo
 860e4e4 refs / heads / master @ {dom 19 sep 23:00:30 2010}: commit: segundo.
 17695bc refs / heads / example_branch @ {Lun Sep 20 00:31:06 2010}: branch: Creado desde HEAD

Primero, si su bifurcación se creó dentro de los días gc.reflogexpire (por defecto 90 días, es decir, alnetworkingedor de 3 meses), puede usar git log -g <branch> o git reflog show <branch> para search la primera input en reflog, que sería evento de creación, y se ve más abajo (para git log -g ):

 Reflog: <branch>@{<nn>} (CR Eator <creator@example.com>) Reflog message: branch: Created from <some other branch> 

Obtendrá quién creó una sucursal, cuántas operaciones hace, y de qué twig (bueno, podría ser simplemente "Creado desde HEAD", que no ayuda mucho).

Eso es lo que MikeSep dijo en su respuesta .


En segundo lugar, si tiene una bifurcación por más time que gc.reflogexpire y ha ejecutado git gc (o se ejecutó automáticamente), tendría que search un ancestro común con la twig desde la que se creó. Eche un vistazo al file config, quizás haya una branch.<branchname>.merge entry, que le diría en qué twig se basa.

Si sabe que la twig en cuestión se creó fuera de la twig maestra (bifurcación de la twig principal), por ejemplo, puede usar el siguiente command para ver ancestros comunes:

 git show $(git merge-base <branch> master) 

También puede probar git show-branch <branch> master , como alternativa.

Esto es lo que dijo gbacon en su respuesta .

Pro Git § 3.1 Git Branching – Lo que una twig es tiene una buena explicación de lo que es realmente una twig git

Una twig en Git es simplemente un puntero mobile ligero para [a] commit.

Como una twig es solo un puntero liviano, git no tiene una noción explícita de su historia o date de creación. "Pero espera," te escucho decir: "¡por supuesto que sabe la historia de mi sucursal!" Especie de.

Si ejecuta cualquiera de los siguientes:

 git log <branch> --not master gitk <branch> --not master 

Verás lo que parece ser el "historial de tu sucursal", pero en realidad es una list de confirmaciones accesibles desde "sucursal" que no son accesibles desde el maestro. Esto le proporciona la información que desea, pero solo si nunca ha fusionado 'branch' con master y nunca ha combinado master en 'branch' desde que lo creó. Si se ha fusionado, esta historia de diferencias queuepsará.

Afortunadamente, el reflog a menudo contiene la información que desea, como se explica en varias otras respuestas aquí. Utilizar esta:

 git reflog --date=local <branch> 

para mostrar la historia de la sucursal. La última input en esta list es (probablemente) el punto en el que creó la twig.

Si la twig ha sido eliminada, 'branch' ya no es un identificador de git válido, pero puede usar esto en su lugar, que puede encontrar lo que desea:

 git reflog --date=local | grep <branch> 

O en un shell de Windows cmd:

 git reflog --date=local | find "<branch>" 

Tenga en count que el reflog no funcionará de manera efectiva en sucursales remotas, solo aquellas en las que ha trabajado localmente.

Todavía no estoy seguro del command git, pero creo que puedes encontrarlos en los reflogs.

 .git/logs/refs/heads/<yourbranch> 

Parece que mis files tienen una timestamp de Unix.

Actualización: parece haber una opción para usar el historial de reflog en lugar del historial de confirmación al imprimir los loggings:

 git log -g 

Puede seguir este logging también, de vuelta a cuando creó la twig. git log embargo, el git log muestra la date de la confirmación, no la date en que realizó la acción que hizo una input en el reflog. Aún no lo he encontrado, excepto mirando el reflog actual en el path de arriba.

Utilizar:

 git reflog 

para mostrar todo el ciclo de vida de su repository en la carpeta actual. El nombre de la twig que aparece primero (de abajo hacia arriba) es la fuente que se creó.

 855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46 855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development 855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46 535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35 855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46 855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development 535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css 855a3ce HEAD@{7}: checkout: moving from development to feature-jira35 855a3ce HEAD@{8}: checkout: moving from master to development 

Eso significa:

  • El desarrollo de la sucursal se crea (checkout -b) desde el maestro

  • Rama feature-jira35 es creada (checkout -b) desde el desarrollo

  • Se crea la twig feature-jira-sut-46 (checkout -b) del desarrollo

Esto es algo que se me ocurrió antes de encontrar este hilo.

 git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1 git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:' 

Prueba esto

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'