Git Ver historial de confirmaciones
Ver el historial de confirmaciones de Git te ayuda a comprender los cambios del código y el progreso del desarrollo.
Git ofrece varios comandos y opciones para ver el historial de confirmaciones, desde registros simples hasta comparaciones detalladas de diferencias.
Generalmente se usan dos comandos para el historial de confirmaciones de Git:
- git log- Ver el historial de confirmaciones.
- git blame <file>- Ver el historial de modificaciones de un archivo específico en formato de lista.
git log
Después de enviar varias actualizaciones con Git, o de clonar un proyecto, si quieres revisar el historial de confirmaciones, podemos usargit logel comando para verlo.
git logEl comando se usa para ver el historial de confirmaciones en el repositorio de Git.
git logMuestra toda la información de las confirmaciones, desde la más reciente hasta la más antigua, incluyendo el hash de la confirmación, el autor, la fecha y el mensaje de confirmación, entre otros.
git logLa sintaxis básica del comando:
git log [选项] [分支名/提交哈希]
Las opciones comunes incluyen:
-p: muestra el parche de la confirmación (el contenido específico de los cambios).--oneline: muestra la información de la confirmación en un formato compacto de una línea.--graph: muestra el historial de ramas y fusiones de forma gráfica.--decorate: muestra las confirmaciones a las que apuntan las ramas y las etiquetas.--author=<作者>: solo muestra las confirmaciones de un autor específico.--since=<时间>: solo muestra las confirmaciones posteriores a una fecha determinada.--until=<时间>: solo muestra las confirmaciones anteriores a una fecha determinada.--grep=<模式>: solo muestra los mensajes de confirmación que contienen un patrón específico.--no-merges: no muestra las confirmaciones de fusión.--stat: muestra estadísticas resumidas, incluidos los archivos modificados y el número de líneas.--abbrev-commit: utiliza hashes de confirmación cortos.--pretty=<格式>: utiliza un formato de visualización personalizado para la información de confirmación.
Para las operaciones del capítulo anterior, usagit logel comando para listar el historial de confirmaciones de la siguiente manera:
$ git log commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master) Merge: c68142b 7774248 Author: ejemplo <[email protected]> Date: Fri May 3 15:55:58 2019 +0800 Merge branch 'change_site' commit c68142b562c260c3071754623b08e2657b4c6d5b Author: ejemplo <[email protected]> Date: Fri May 3 15:52:12 2019 +0800 修改代码 commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site) Author: ejemplo <[email protected]> Date: Fri May 3 15:49:26 2019 +0800 changed the ejemplo.php commit c1501a244676ff55e7cccac1ecac0e18cbf6cb00 Author: ejemplo <[email protected]> Date: Fri May 3 15:35:32 2019 +0800
Podemos usar la opción --oneline para ver una versión concisa del historial.
$ git log --oneline $ git log --oneline d5e9fc2 (HEAD -> master) Merge branch 'change_site' c68142b 修改代码 7774248 (change_site) changed the ejemplo.php c1501a2 removed test.txt、add ejemplo.php 3e92c19 add test.txt 3b58100 第一次版本提交
Esto nos muestra el historial de desarrollo de este proyecto.
También podemos usar la opción --graph para ver cuándo aparecieron ramas y fusiones en el historial. A continuación se muestra el mismo comando con la opción de gráfico topológico activada:
* d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the ejemplo.php * | c68142b 修改代码 |/ * c1501a2 removed test.txt、add ejemplo.php * 3e92c19 add test.txt * 3b58100 第一次版本提交
Ahora podemos ver con mayor claridad cuándo el trabajo se dividió y cuándo se fusionó.
También puedes usar--reverseel parámetro para mostrar todos los registros en orden inverso.
$ git log --reverse --oneline 3b58100 第一次版本提交 3e92c19 add test.txt c1501a2 removed test.txt、add ejemplo.php 7774248 (change_site) changed the ejemplo.php c68142b 修改代码 d5e9fc2 (HEAD -> master) Merge branch 'change_site'
Si solo quieres buscar las confirmaciones de un usuario específico, puedes usar el comando: git log --author. Por ejemplo, supongamos que queremos encontrar las confirmaciones de Linus en el código fuente de Git:
$ git log --author=Linus --oneline -5 81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory 3bb7256 make "index-pack" a built-in 377d027 make "git pack-redundant" a built-in b532581 make "git unpack-file" a built-in 112dd51 make "mktag" a built-in
Si necesitas especificar una fecha, puedes usar varias opciones: --since y --before, pero también puedes usar --until y --after.
Por ejemplo, si quiero ver todas las confirmaciones del proyecto Git de hace tres semanas pero posteriores al 18 de abril, puedo ejecutar esto (también usé la opción --no-merges para ocultar las confirmaciones de fusión):
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
5469e2d Git 1.7.1-rc2
d43427d Documentation/remote-helpers: Fix typos and improve language
272a36b Fixup: Second argument may be any arbitrary string
b6c8d2d Documentation/remote-helpers: Add invocation section
5ce4f4e Documentation/urls: Rewrite to accomodate transport::address
00b84e9 Documentation/remote-helpers: Rewrite description
03aa87e Documentation: Describe other situations where -z affects git diff
77bc694 rebase-interactive: silence warning when no commits rewritten
636db2c t3301: add tests to use --format="%N"
Opciones comunes
Limitar el número de confirmaciones mostradas:
git log -n <number>
Por ejemplo, mostrar las 5 confirmaciones más recientes:
git log -n 5
Mostrar las confirmaciones posteriores a una fecha determinada:
git log --since="2024-01-01"
Mostrar las confirmaciones anteriores a una fecha determinada:
git log --until="2024-07-01"
Mostrar solo las confirmaciones de un autor:
git log --author="Author Name"
Másgit logEl comando puede verhttp://git-scm.com/docs/git-logo usargit log --helpel comando para ver la información de ayuda.
git blame
git blameEl comando se usa para mostrar, línea por línea, quién introdujo o modificó cada línea de código de un archivo específico y cuándo.
git blamePermite rastrear el historial de cambios de cada línea del archivo, incluyendo el autor, el hash de la confirmación, la fecha y el mensaje de confirmación, entre otros.
Si quieres ver el historial de modificaciones de un archivo específico, puedes usar el comando git blame, con el siguiente formato:
git blame [选项] <文件路径>
Las opciones comunes incluyen:
-L <起始行号>,<结束行号>: solo muestra las anotaciones de código dentro del rango de números de línea especificado.-C: también rastrea el origen de las líneas de código renombradas o copiadas.-M: también rastrea el origen de las líneas de código movidas.-C -Co-M -M: realiza un rastreo más profundo de las líneas de código con muchos cambios.--show-stats: muestra estadísticas del número de líneas por autor.
Muestra las anotaciones de código y la información relacionada de cada línea del archivo:
git blame <文件路径>
Solo muestra las anotaciones de código dentro del rango de números de línea especificado:
git blame -L <起始行号>,<结束行号> <文件路径>
Rastrear el origen de las líneas de código renombradas o copiadas:
git blame -C <文件路径>
Rastrear el origen de las líneas de código movidas:
git blame -M <文件路径>
Mostrar estadísticas del número de líneas:
git blame --show-stats <文件路径>
El comando git blame muestra el historial de modificaciones en formato de lista, como en el siguiente ejemplo:
$ git blame README ^d2097aa (tianqixin 2020-08-25 14:59:25 +0800 1) # Ejemplo Git 测试 db9315b0 (ejemplo 2020-08-25 16:00:23 +0800 2) # Ejemplo
Para más contenido, puedes usargit blame --helpver el documento de ayuda completo para conocer más opciones y formas de uso.
Restaurar y revertir
Git ofrece varias formas de restaurar y revertir a versiones anteriores. Los diferentes comandos se adaptan a diferentes escenarios y necesidades.
A continuación se presentan algunos métodos comunes:
git checkout: cambiar de rama o restaurar archivos a una confirmación específica.git reset: restablecer la rama actual a una confirmación específica (reset suave, reset mixto, reset duro).git revert: crear una nueva confirmación para deshacer una confirmación específica sin cambiar el historial de confirmaciones.git reflog: ver el historial de operaciones para recuperar confirmaciones perdidas.
1. git checkout: extraer un archivo de una versión específica
El comando git checkout se usa para cambiar de rama o restaurar archivos en el directorio de trabajo a una confirmación específica.
Restaurar archivos del directorio de trabajo a una confirmación:
git checkout <commit> -- <filename>
Por ejemplo, restaurar file.txt a la versión de la confirmación abc123:
git checkout abc123 -- file.txt
Cambiar a una confirmación específica:
git checkout <commit>
Por ejemplo:
git checkout abc123
Al cambiar a una confirmación específica de esta manera, se entra en el estado de HEAD separado (detached HEAD).
2. git reset: restablecer la rama actual a una confirmación específica
El comando git reset puede cambiar el historial de confirmaciones de la rama actual. Tiene tres modos principales: --soft, --mixed y --hard.
--soft: solo restablece HEAD a la confirmación especificada; el área de preparación y el directorio de trabajo permanecen sin cambios.
git reset --soft <commit>
--mixed (por defecto): restablece HEAD a la confirmación especificada; el área de preparación se restablece, pero el directorio de trabajo permanece sin cambios.
git reset --mixed <commit>
--hard: restablece HEAD a la confirmación especificada; tanto el área de preparación como el directorio de trabajo se restablecen.
git reset --hard <commit>
Por ejemplo, restablecer la rama actual a la confirmación abc123:
git reset --hard abc123
3. git revert: deshacer una confirmación
El comando git revert crea una nueva confirmación para deshacer la confirmación especificada. No cambia el historial de confirmaciones y es adecuado para confirmaciones que ya se han enviado al repositorio remoto.
git revert <commit>
Por ejemplo, deshacer la confirmación abc123:
git revert abc123
4. git reflog: ver el historial de operaciones
El comando git reflog registra todos los movimientos de HEAD. Incluso si una confirmación se elimina o se restablece, se puede recuperar mediante reflog.
git reflog
Usando reflog se puede encontrar el hash de una confirmación anterior y así restaurar un estado específico. Por ejemplo:
git reset --hard HEAD@{3}
Ejemplo
A continuación se muestra un ejemplo completo que demuestra cómo usar estos comandos para restaurar versiones históricas:
Ver el historial de confirmaciones:
git log --oneline
Supongamos que la salida es la siguiente:
abc1234 Commit 1 def5678 Commit 2 ghi9012 Commit 3
Cambiar a Commit 2 (en estado de HEAD separado):
git checkout def5678
Restablecer a Commit 2, conservando los cambios en el área de preparación:
git reset --soft def5678
Restablecer a Commit 2, cancelando los cambios del área de preparación:
git reset --mixed def5678
Restablecer a Commit 2, descartando todos los cambios:
git reset --hard def5678
Deshacer Commit 2:
git revert def5678
Ver reflog para recuperar confirmaciones perdidas:
git reflog
Encontrar el hash de la confirmación anterior y restaurar:
git reset --hard HEAD@{3} Otras extensiones