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.