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


¿ Hay una manera de determinar cuando ¿se creó una rama de Git? Tengo una rama en mi repositorio y no recuerdo haberla creado y pensé que tal vez ver la marca de tiempo de creación refrescaría mi memoria.

Author: paxos1977, 2010-02-13

8 answers

Use

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

Si prefieres verlo en contexto, usa

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

(donde foo es el nombre de la rama que estás buscando.)

Pantallazo

 112
Author: Greg Bacon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 02:56:38

Como aparece en los comentarios y en La respuesta de Jackub, siempre y cuando tu rama sea más joven que el número de días establecido en la configuración gc.reflogexpire (el valor predeterminado es 90 días), entonces puedes utilizar tu reflog para averiguar cuándo se creó por primera vez una referencia de rama.

Tenga en cuenta que git reflog puede tomar la mayoría git log banderas. Además, tenga en cuenta que los selectores de estilo HEAD@{0} son efectivamente nociones de tiempo y, de hecho, se manejan (de una manera hackeada) como cadenas de fecha. Esto significa que puede usar la bandera --date=local y obtener una salida como esta:

$ git reflog --date=local
763008c HEAD@{Fri Aug 20 10:09:18 2010}: pull : Fast-forward
f6cec0a HEAD@{Tue Aug 10 09:37:55 2010}: pull : Fast-forward
e9e70bc HEAD@{Thu Feb 4 02:51:10 2010}: pull : Fast forward
836f48c HEAD@{Thu Jan 21 14:08:14 2010}: checkout: moving from master to master
836f48c HEAD@{Thu Jan 21 14:08:10 2010}: pull : Fast forward
24bc734 HEAD@{Wed Jan 20 12:05:45 2010}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 
74fca6a HEAD@{Wed Jan 20 11:55:43 2010}: checkout: moving from master to v2.6.31
24bc734 HEAD@{Wed Jan 20 11:44:42 2010}: pull : Fast forward
964fe08 HEAD@{Mon Oct 26 15:29:29 2009}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 
4a6908a HEAD@{Mon Oct 26 14:52:12 2009}: checkout: moving from master to v2.6.28

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

$ git reflog --date=relative
763008c HEAD@{4 weeks ago}: pull : Fast-forward
f6cec0a HEAD@{6 weeks ago}: pull : Fast-forward
e9e70bc HEAD@{8 months ago}: pull : Fast forward
836f48c HEAD@{8 months ago}: checkout: moving from master to master
836f48c HEAD@{8 months ago}: pull : Fast forward
24bc734 HEAD@{8 months ago}: checkout: moving from 74fca6a42863ffacaf7ba6f1936a9f228950f657 to master
74fca6a HEAD@{8 months ago}: checkout: moving from master to v2.6.31
24bc734 HEAD@{8 months ago}: pull : Fast forward
964fe08 HEAD@{11 months ago}: checkout: moving from 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 to master
4a6908a HEAD@{11 months ago}: checkout: moving from master to v2.6.28

Una última nota: la bandera --all (que es realmente una bandera git-log entendida por git-reflog) mostrará los reflogs para todas las referencias conocidas en refs/ (en lugar de simplemente, HEAD) que le mostrará los eventos de rama claramente:

git reflog --date=local --all
860e4e4 refs/heads/master@{Sun Sep 19 23:00:30 2010}: commit: Second.
17695bc refs/heads/example_branch@{Mon Sep 20 00:31:06 2010}: branch: Created from HEAD
 101
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:44

Primero, si la rama se creó dentro de gc.reflogexpire días (por defecto 90 días, es decir, alrededor de 3 meses), puede usar git log -g <branch> o git reflog show <branch> para encontrar la primera entrada en reflog, que sería evento de creación, y se ve algo como a continuación (para git log -g):

Reflog: <branch>@{<nn>} (C R Eator <[email protected]>)
Reflog message: branch: Created from <some other branch>

Obtendrías quién creó una rama, cuántas operaciones hace y desde qué rama (bueno, podría ser simplemente "Creada desde HEAD", lo que no ayuda mucho).

Eso es lo que MikeSep dijo en su respuesta.


En segundo lugar, si tiene rama por más tiempo que gc.reflogexpire y ha ejecutado git gc (o se ejecutó automáticamente), tendría que encontrar el ancestro común con la rama desde la que se creó. Echa un vistazo al archivo de configuración, quizás haya una entrada branch.<branchname>.merge, que te dirá en qué rama se basa esta.

Si sabe que la rama en cuestión se creó fuera de la rama master (bifurcación de la rama master), por ejemplo, puede usar el siguiente comando para ver antepasado común:

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

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

Esto es lo que gbacon dijo en su respuesta.

 35
Author: Jakub Narębski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:11

Pro Git § 3.1 Ramificación de Git-Qué es una rama tiene una buena explicación de lo que es realmente una rama de git

Una rama en Git es simplemente un puntero móvil ligero para [a] commit.

Dado que una rama es solo un puntero ligero, git no tiene una noción explícita de su historial o fecha de creación. "Pero espera", te oigo decir, " ¡Por supuesto que git conoce mi historial de sucursales!"Bueno, más o menos.

Si ejecuta cualquiera de las siguientes opciones:

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

Verás lo que parece ser el "historial de tu rama", pero en realidad es una lista de confirmaciones accesibles desde 'rama' que no son accesibles desde master. Esto le da la información que desea, pero si y solo si nunca ha fusionado 'branch' de nuevo a master, y nunca ha fusionado master en 'branch' desde que lo creó. Si tiene fusionado, entonces este historial de diferencias colapsará.

Afortunadamente, el reflog a menudo contiene la información que desea, como se explica en varios otros respuestas aquí. Usa esto:

git reflog --date=local <branch>

Para mostrar el historial de la rama. La última entrada en esta lista es (probablemente) el punto en el que creó la rama.

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

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

O en un shell cmd de Windows:

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

Tenga en cuenta que reflog no funcionará de manera efectiva en ramas remotas, solo en aquellas en las que haya trabajado localmente.

 32
Author: yoyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-24 18:46:33

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

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

Mis archivos parecen tener una marca de tiempo unix en ellos.

Actualizar: Parece que hay una opción para usar el historial de reflog en lugar del historial de confirmaciones al imprimir los registros:

git log -g

También puede seguir este registro, de vuelta a cuando creó la rama. git log muestra la fecha de la confirmación, sin embargo, no la fecha en que realizó la acción que hizo una entrada en el reflog. No he encontrado eso todavía, excepto mirando el reflog real en la ruta anterior.

 14
Author: MikeSep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-12 22:42:46

Uso:

git reflog

Para mostrar todo el ciclo de vida de su repositorio en la carpeta actual. El nombre de la rama que aparece por primera vez (de abajo a arriba) es el origen 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 rama se crea (checkout-b) desde master

  • Característica de rama-jira35 se crea (checkout-b) desde desarrollo

  • Branch feature-jira-sut-46 se crea (checkout-b) desde el desarrollo

 6
Author: De Nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-29 10:03:16

Prueba esto

  git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
 3
Author: Sireesh Yarlagadda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 14:09:47

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:'
 2
Author: Andrew Sohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-10 18:53:04