Generalmente la búsqueda de un error en el código requiere de usar git para encontrar el error.
El comando git blame muestra el autor, hash y fecha de cada línea del código existente en el código fuente.
¿Qué ocurre si necesitamos tener en cuenta también las líneas que se eliminan?
En ese caso, existe una solución: git log -S
Veamos un escenario real. Imaginemos que tenemos un tipo enumerado para una máquina de estados
enum class States {
IDLE,
WAITING_USER_INPUT,
PROCESSING,
FINISHED
};
y alguien borra uno de los estados.
enum class States {
IDLE,
WAITING_USER_INPUT,
- PROCESSING,
- FINISHED
+ PROCESSING
};
Si hicieramos un git blame al código actual con un estado borrado:
^cbf40f5 (Andres 2022-04-22 12:39:19 +0100 1) enum class States {
^cbf40f5 (Andres 2022-04-22 12:39:19 +0100 2) IDLE,
^cbf40f5 (Andres 2022-04-22 12:39:19 +0100 3) WAITING_USER_INPUT,
8dce259a (Andres 2022-04-22 12:39:37 +0100 4) PROCESSING
^cbf40f5 (Andres 2022-04-22 12:39:19 +0100 5) };
Como se puede ver la información de que se ha borrado un estado no está.
Sin embargo, si lanzamos un git log:
$ git log -S 'FINISHED' main.cc
commit 8dce259a85f74dc04b22ef4b6bf40c27924725f1 (HEAD -> master)
Author: Andres <andres7293@gmail.com>
Date: Fri Apr 22 12:39:37 2022 +0100
Delete unused state
commit cbf40f500a27df09f809a670353b0d33ff0843b4
Author: Andres <andres7293@gmail.com>
Date: Fri Apr 22 12:39:19 2022 +0100
Create state machine
Se muestra todos los commits en los que la cadena ‘FINISHED’ se ha agregado o borrado.