¿Qué significa bang bang (^!) Después del commit hash al llamar a git diff?

Mirando el código fuente para corchetes-git (una extensión git para corchetes ), veo que ^! (caret bang) se está añadiendo al commit hash al llamar a git diff . Ver GitCli.js, línea 754 :

 function getDiffOfFileFromCommit(hash, file) { return git(["diff", "--no-ext-diff", "--no-color", hash + "^!", "--", file]); } 

Esto se traduce a lo siguiente en la línea de command, usando el file en cuestión como ejemplo:

 $ git diff --no-ext-diff --no-color 1f9ea6e^! -- src/git/GitCli.js 

Sé que ^ se referiría al padre del compromiso. ¿Qué hace ^! ¿hacer?

commit^! es un especificador de range que significa: este compromiso, pero ninguno de sus padres. Es equivalente a especificar: commit ^parent1 ^parent2 ^parentN .

Para diff, esto no tiene sentido (solo se pueden comparar dos treees). Al probar, el command parece mostrar las diferencias entre la base de combinación de los padres y el último padre. Creo que git (mis) interpreta los parameters similares al range A...B que mostrará las diferencias entre la merge-base AB y B ( git diff parent1...parent2 producirá la misma diferencia). No estoy seguro de lo que sucederá en el caso de una fusión de pulpo.

Sin embargo, podría estar equivocado, estas son solo suposiciones que saqué de las testings con un repository y examinando el código git ( builtin/diff.c ).