tutorial lab hub gui español commands git

lab - git repository



En git, ¿puede ver las confirmaciones más antiguas aplicadas a un archivo después de que se haya movido? (2)

'' git-log -M '' proporcionará el historial de confirmación con información de cambio de nombre, como se menciona en GitFaq "¿Por qué git no" hace un seguimiento de "nombre"?

La maquinaria diff en Git tiene soporte para la detección automática de nombres, esto se activa mediante el interruptor '' -M '' de la familia de comandos git-diff-* .
La maquinaria de detección de cambio de nombre es utilizada por git-log y git-whatchanged .
Git también es compatible con una forma limitada de fusión a través de los nombres. Las dos herramientas para asignar culpar, git-blame y git-annotate usan el código de detección de cambio de nombre automático para rastrear los nombres.

Como un caso muy especial, git-log versión 1.5.3 y posterior tiene la opción '' --follow '' que le permite seguir los nombres cuando se le da una sola ruta .

en tu ejemplo:

F:/prog/git/test/rename>git log --follow bar commit 81f52b91eb2fc7ad18051c93f3e4d583f27c15ca Author: VonC <> Date: Tue Jun 2 21:54:43 2009 +0200 renamed foo to bar commit 71aff26ace6ab249ab2042d1e5d20377486ce478 Author: VonC <> Date: Tue Jun 2 21:54:19 2009 +0200 edited foo commit c893199da767eddac6a547b940557435ade4d18c Author: VonC <> Date: Tue Jun 2 21:53:51 2009 +0200 initial commit

Nota: todo esto es posible porque no modificaste drásticamente el contenido de foo antes de cambiar el nombre a barra. Si el contenido fuera completamente diferente, la opción --follow no podría obtener todo el historial.

Después de mover un archivo en git (usando git mv ), mirar en el registro de ese archivo solo muestra las confirmaciones incluidas y después de la mudanza.

¿Hay alguna forma de ver los compromisos aplicados al archivo con su nombre anterior? En el ejemplo, a continuación, me gustaría ver las confirmaciones b04033bdc44f1 y 8ca40d563ce5d en el git log vez que haya realizado el movimiento.

$ git init Initialized empty Git repository in /Users/ben/code/git_mv_example/.git/ $ touch foo $ git add foo $ git commit -m "Initial commit" Created initial commit 8ca40d5: Initial commit 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 foo [master*]$ echo "abcdefg" > foo [master*]$ git commit -a -m "edited foo" Created commit b04033b: edited foo 1 files changed, 1 insertions(+), 0 deletions(-) $ git log foo commit b04033bdc44f1eb3477270b4b7ca727377d8c03a Author: Ben Brinckerhoff <[email protected]> Date: Tue Jun 2 13:26:53 2009 -0600 edited foo commit 8ca40d563ce5d07d965bfb75a01b9c23378fd321 Author: Ben Brinckerhoff <[email protected]> Date: Tue Jun 2 13:26:15 2009 -0600 Initial commit $ git mv foo bar [master+]$ git commit -a -m "renamed foo to bar" Created commit 2bccdf6: renamed foo to bar 1 files changed, 0 insertions(+), 0 deletions(-) rename foo => bar (100%) $ git log bar commit 2bccdf6fc65b9da5b279d9f1117e436549dd3a7b Author: Ben Brinckerhoff <[email protected]> Date: Tue Jun 2 13:27:14 2009 -0600 renamed foo to bar $ git log foo fatal: ambiguous argument ''foo'': unknown revision or path not in the working tree. Use ''--'' to separate paths from revisions

¿No es esto posible? O tal vez es git log el comando incorrecto para esto?


Respuesta corta: usar

$ git log -M --follow bar

o

$ git log -M -- foo bar

especificando tanto el nombre antiguo como el nuevo.

Por cierto, como git utiliza la detección heurística basada en el cambio de nombre, es posible que los ejemplos de juguetes no funcionen como usted desea, mientras que los ejemplos de la vida real (o los ejemplos con más contenidos sin cambios) funcionarán como se espera.

Tenga en cuenta que en git path, un argumento para git-log no es un filtro de ruta, sino un limitador de ruta (y puede ser, por ejemplo, un directorio).