ver remota rama modificados example cambiar archivos git branch git-branch

remota - git push example



¿Cómo determinar cuándo se creó una rama Git? (8)

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:''

¿Hay una manera de determinar cuándo se creó una rama Git? Tengo una sucursal en mi repo y no recuerdo haberla creado y pensé que ver la marca de tiempo de la creación me refrescaría la memoria.


No estoy seguro del comando git para eso todavía, 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 reincidencias en lugar del historial de confirmación 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, no la fecha en la que realizó la acción que realizó una entrada en el reflog. No lo he encontrado todavía, excepto mirando el reflog real en el camino anterior.


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 el 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ía quién creó una sucursal, cuántas operaciones se realizaron y desde qué sucursal (bueno, podría ser simplemente "Creado desde HEAD", lo que no ayuda mucho).

Eso es lo que dijo MikeSep en su respuesta .

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

Si sabe que la rama en cuestión se creó fuera de la rama maestra (forking 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 puede probar git show-branch <branch> master , como alternativa.

Esto es lo que dijo gbacon en su respuesta .


Prueba esto

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


Utilizar

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

Si prefieres verlo en contexto, entonces usa

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

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


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 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:

  • Se crea el desarrollo de rama (checkout -b) desde el maestro

  • Se crea la función Branch-jira35 (checkout -b) desde el desarrollo

  • Se crea la característica de rama-jira-sut-46 (verificación -b) desde el desarrollo


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

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

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 el historial de mi sucursal!" Especie de.

Si ejecuta alguno de los siguientes:

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

Verá lo que parece ser el "historial de su rama", pero en realidad es una lista de confirmaciones accesibles desde "rama" que no son accesibles desde el maestro. Esto le brinda la información que desea, pero solo si nunca ha fusionado ''ramificación'' de nuevo al maestro, y nunca ha fusionado el maestro en ''ramificación'' desde que la creó. Si se ha fusionado, entonces esta historia de diferencias colapsará.

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

git reflog --date=local <branch>

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

Si la rama se ha eliminado, ''rama'' ya no es un identificador de git válido, pero puedes usar esto en su lugar, que puede encontrar lo que deseas:

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

O en una 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 las que ha trabajado localmente.


Como se indica en los comentarios y en la respuesta de Jackub , siempre que su sucursal sea más joven que el número de días establecido en la configuración config gc.reflogexpire (el valor predeterminado es 90 días), entonces puede utilizar su reflog para averiguar cuándo referencia de rama fue creada por primera vez.

Tenga en cuenta que git reflog puede tomar la mayoría de las git reflog git log . 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 pirateada) como cadenas de fecha. Esto significa que puede usar el indicador --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 para 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 en realidad es una marca de git-log entendida por git-reflog) mostrará los réplicas para todas las referencias conocidas en refs/ (en lugar de simplemente, HEAD ) que le mostrarán claramente los eventos de las ramas:

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