¿Hay alguna manera de determinar cuándo se creó una rama Git? Tengo una rama en mi repositorio y no recuerdo haberla creado, y pensé que tal vez ver la marca de tiempo de la creación podría activar mi memoria.
¿Hay alguna manera de determinar cuándo se creó una rama Git? Tengo una rama en mi repositorio y no recuerdo haberla creado, y pensé que tal vez ver la marca de tiempo de la creación podría activar mi memoria.
Respuestas:
Utilizar
git show - resumen `git merge-base foo master`
Si prefieres verlo en contexto usando gitk, entonces usa
gitk --all --select-commit = `git merge-base foo master`
(donde foo es el nombre de la sucursal que está buscando).
Como se señaló en los comentarios y en la respuesta de Jackub , siempre que su rama sea más joven que la cantidad de días establecida en la configuracióngc.reflogexpire
(el valor predeterminado es 90 días), puede utilizar su registro para averiguar cuándo fue una referencia de sucursal Primero creado.
Tenga en cuenta que git reflog
puede tomar la mayoría de las git log
banderas. Además, tenga en cuenta que los HEAD@{0}
selectores de estilo son efectivamente nociones de tiempo y, de hecho, se manejan (de forma pirateada) como cadenas de fecha. Esto significa que puede usar la bandera --date=local
y obtener resultados como este:
$ git reflog --date = local 763008c HEAD @ {vie 20 de agosto 10:09:18 2010}: pull: avance rápido f6cec0a HEAD @ {Tue Aug 10 09:37:55 2010}: pull: Fast-forward e9e70bc HEAD @ {jue 4 de febrero 02:51:10 2010}: pull: avance rápido 836f48c HEAD @ {jue 21 de enero 14:08:14 2010}: pago: pasar de maestro a maestro 836f48c HEAD @ {jue 21 de enero 14:08:10 2010}: pull: avance rápido 24bc734 HEAD @ {Wed Jan 20 12:05:45 2010}: finalización de la compra: pasar de 74fca6a42863ffacaf7ba6f1936a9f228950f657 74fca6a HEAD @ {mié 20 de enero 11:55:43 2010}: pago: pasar de maestro a v2.6.31 24bc734 HEAD @ {mié 20 de enero 11:44:42 2010}: pull: avance rápido 964fe08 HEAD @ {Lun Oct 26 15:29:29 2009}: finalización de la compra: pasar de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 4a6908a HEAD @ {Lun Oct 26 14:52:12 2009}: pago: pasar de maestro a v2.6.28
También puede ser útil en ocasiones 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}: pago: pasar de maestro a maestro 836f48c HEAD @ {hace 8 meses}: pull: avance rápido 24bc734 HEAD @ {hace 8 meses}: pago: pasar de 74fca6a42863ffacaf7ba6f1936a9f228950f657 a master 74fca6a HEAD @ {hace 8 meses}: pago: pasar de master a v2.6.31 24bc734 HEAD @ {hace 8 meses}: pull: avance rápido 964fe08 HEAD @ {hace 11 meses}: pago: pasar de 4a6908a3a050aacc9c3a2f36b276b46c0629ad91 a master 4a6908a HEAD @ {hace 11 meses}: pago: pasar de master a v2.6.28
Una última nota: el --all
indicador (que es realmente un indicador de git-log entendido por git-reflog) mostrará los registros de todas las referencias conocidas en refs/
( en lugar de simplemente HEAD
) , que le mostrará claramente los eventos de ramificación:
git reflog --date = local --todos 860e4e4 refs / heads / master @ {dom sep 19 23:00:30 2010}: commit: Second. 17695bc refs / heads / example_branch @ {Mon Sep 20 00:31:06 2010}: branch: Creado desde HEAD
gc.reflogexpire
días.
Pro Git § 3.1 Git Branching: qué es una rama tiene una buena explicación de lo que realmente es una rama git
Una rama en Git es simplemente un puntero móvil ligero para [a] commit.
Dado que una rama es solo un puntero liviano, git no tiene una noción explícita de su historial o fecha de creación. "Pero espera", te escucho decir, "¡por supuesto que Git conoce la historia de mi sucursal!" Especie de.
Si ejecuta alguno de los siguientes:
git log <branch> --not master
gitk <branch> --not master
verá lo que parece el "historial de su rama", pero es realmente una lista de confirmaciones accesibles desde 'rama' a las que no se puede acceder desde el maestro. Esto le brinda la información que desea, pero si y solo si nunca ha fusionado 'rama' de nuevo a maestro, y nunca ha fusionado maestro a 'rama' desde que lo creó. Si se ha fusionado, entonces este historial de diferencias colapsará.
Afortunadamente, el reflog a menudo contiene la información que desea, como se explica en varias otras respuestas aquí. Utilizar este:
git reflog --date=local <branch>
para mostrar la historia de la sucursal. La última entrada en esta lista es (probablemente) el punto en el que creó la rama.
Si la rama se ha eliminado, entonces 'rama' ya no es un identificador 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 cmd de Windows:
git reflog --date=local | find "<branch>"
Tenga en cuenta que reflog no funcionará de manera efectiva en sucursales remotas, solo en aquellas en las que haya trabajado localmente.
gc.reflogexpire
días, como se señala en esta respuesta y esta respuesta .
git reflog --date=local <branch>
Primero, si su bifurcación se creó dentro de los 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 el registro de registros, que sería un evento de creación, y se parece a lo siguiente (para git log -g
):
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
Obtendría quién creó una rama, cuántas operaciones hace y desde qué rama (bueno, podría ser simplemente "Creado desde HEAD", lo que no ayuda mucho).
Eso es lo que MikeSep dijo en su respuesta .
En segundo lugar, si tiene una rama por más tiempo gc.reflogexpire
y se ha ejecutado git gc
(o se ejecutó automáticamente), tendría que encontrar un antepasado común con la rama a partir de la cual se creó. Eche un vistazo al archivo de configuración, tal vez haya una branch.<branchname>.merge
entrada, que le dirá en qué rama se basa este.
Si sabe que la rama en cuestión se creó fuera de la rama maestra (bifurcación de la rama maestra), por ejemplo, puede usar el siguiente comando para ver un ancestro común:
git show $(git merge-base <branch> master)
También puedes probar git show-branch <branch> master
, como alternativa.
Esto es lo que dijo gbacon en su respuesta .
Todavía no estoy seguro del comando git para él, pero creo que puedes encontrarlos en los reflogs.
.git/logs/refs/heads/<yourbranch>
Mis archivos parecen tener una marca de tiempo de Unix en ellos.
Actualización: parece haber una opción para usar el historial de reflog en lugar del historial de confirmación al imprimir los registros:
git log -g
También puede seguir este registro, desde el momento en que creó la rama. git log
muestra la fecha de la confirmación, sin embargo, no la fecha en la que realizó la acción que hizo una entrada en el registro. Todavía no lo he encontrado, excepto al buscar en el registro real en la ruta anterior.
Prueba esto
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
antes(refname)
| cut -c 5- | sort -r |
y luego pasé por grep durante el mes, dándome una lista en orden cronológico inverso, más o menos.
--sort='-committerdate'
(tenga en cuenta el '-' antes de la fecha de confirmación para el orden cronológico inverso).
Utilizar:
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 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
Se crea la función Branch-jira35 (checkout -b) desde el desarrollo
La rama branch-jira-sut-46 se crea (checkout -b) a partir 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:'
Este comando muestra la fecha de creación de la rama dev
desdemain
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
Si desea obtener los detalles de todas las sucursales
for i in `git branch -r | tail -n +2 `;do git log --reverse $i|grep -A 2 -B 2 `echo $i | awk -F'origin/' '{print $2}'` |head -n 4; done
Encontré la mejor manera: siempre reviso la última sucursal creada de esta manera
git for-each-ref --sort=-committerdate refs/heads/
Combinado con la respuesta de Andrew Sohn ( https://stackoverflow.com/a/14265207/1929406 )
branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
Esto lo hizo por mí: (10 años después)
git log [--remotes] --no-walk --decorate
Como no hay información almacenada sobre los tiempos de creación de sucursales, lo que hace es mostrar la primera confirmación de cada rama ( --no-walk
), que incluye la fecha de la confirmación. Utilizar--remotes
para las sucursales remotas u omítalo para las sucursales locales.
Como realizo al menos una confirmación en una rama antes de crear otra, esto me permitió rastrear algunos meses de creaciones de ramas (y función dev-start) para fines de documentación.
fuente: AnoE en stackexchange