¿Recuperar el registro de confirmación de una línea específica en un archivo?
¿Hay alguna forma de hacer que git le proporcione un registro de confirmaciones solo para las confirmaciones que tocaron una línea particular en un archivo?
Me gusta git blame
, pero git blame
le mostrará la ÚLTIMA confirmación que tocó una línea en particular.
Realmente me gustaría obtener un registro similar, no la lista de confirmaciones en cualquier parte del archivo, sino solo las confirmaciones que tocaron una línea en particular.
Consulte también Git: descubra qué confirmaciones tocaron alguna vez un rango de líneas .
Desde Git 1.8.4 , git log
hay -L
que ver la evolución de una serie de líneas.
Por ejemplo, supongamos que observa git blame
la salida de. Aquí -L 150,+11
significa "mira sólo las líneas 150 a 150+11":
$ git blame -L 150,+11 -- git-web--browse.sh
a180055a git-web--browse.sh (Giuseppe Bilotta 2010-12-03 17:47:36 +0100 150) die "The browser $browser is not
a180055a git-web--browse.sh (Giuseppe Bilotta 2010-12-03 17:47:36 +0100 151) fi
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 152) fi
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 153)
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 154) case "$browser" in
81f42f11 git-web--browse.sh (Giuseppe Bilotta 2010-12-03 17:47:38 +0100 155) firefox|iceweasel|seamonkey|iceape)
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 156) # Check version because firefox < 2.0 do
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 157) vers=$(expr "$($browser_path -version)"
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 158) NEWTAB='-new-tab'
5d6491c7 git-browse-help.sh (Christian Couder 2007-12-02 06:07:55 +0100 159) test "$vers" -lt 2 && NEWTAB=''
a0685a4f git-web--browse.sh (Dmitry Potapov 2008-02-09 23:22:22 -0800 160) "$browser_path" $NEWTAB "$@" &
Y quieres saber la historia de lo que hoy es la línea 155.
Luego, usa git log
. Aquí, -L 155,155:git-web--browse.sh
significa "rastrear la evolución de las líneas 155 a 155 en el archivo denominado git-web--browse.sh
".
$ git log --pretty=short -u -L 155,155:git-web--browse.sh
commit 81f42f11496b9117273939c98d270af273c8a463
Author: Giuseppe Bilotta <[email protected]>
web--browse: support opera, seamonkey and elinks
diff --git a/git-web--browse.sh b/git-web--browse.sh
--- a/git-web--browse.sh
+++ b/git-web--browse.sh
@@ -143,1 +143,1 @@
-firefox|iceweasel)
+firefox|iceweasel|seamonkey|iceape)
commit a180055a47c6793eaaba6289f623cff32644215b
Author: Giuseppe Bilotta <[email protected]>
web--browse: coding style
diff --git a/git-web--browse.sh b/git-web--browse.sh
--- a/git-web--browse.sh
+++ b/git-web--browse.sh
@@ -142,1 +142,1 @@
- firefox|iceweasel)
+firefox|iceweasel)
commit 5884f1fe96b33d9666a78e660042b1e3e5f9f4d9
Author: Christian Couder <[email protected]>
Rename 'git-help--browse.sh' to 'git-web--browse.sh'.
diff --git a/git-web--browse.sh b/git-web--browse.sh
--- /dev/null
+++ b/git-web--browse.sh
@@ -0,0 +127,1 @@
+ firefox|iceweasel)
Puede obtener un conjunto de confirmaciones usando pico.
git log -S'the line from your file' -- path/to/your/file.txt
Esto le dará todas las confirmaciones que afectaron ese texto en ese archivo. Si se cambió el nombre del archivo en algún momento, puede agregar --follow-parent.
Si desea inspeccionar las confirmaciones en cada una de estas ediciones, puede canalizar ese resultado a git show:
git log ... | xargs -n 1 git show
Intente utilizar el siguiente comando implementado en Git 1.8.4.
git log -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
Entonces, en tu caso upperLimit
& lowerLimit
es el tocadoline_number
Puede encontrar más información aquí .
Simplificando la respuesta de @matt:
git blame -L14,15 -- <file_path>
Aquí obtendrás la culpa de unas líneas 14 to 15
.
Dado que -L
la opción espera Range
como parámetro, no podemos obtener Blame
una sola línea usando la -L
opción` .
Referencia