¿Recuperar el registro de confirmación de una línea específica en un archivo?

Resuelto jrochkind asked hace 13 años • 12 respuestas

¿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 blamele 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.

jrochkind avatar Dec 09 '11 00:12 jrochkind
Aceptado

Consulte también Git: descubra qué confirmaciones tocaron alguna vez un rango de líneas .


Desde Git 1.8.4 , git loghay -Lque ver la evolución de una serie de líneas.

Por ejemplo, supongamos que observa git blamela salida de. Aquí -L 150,+11significa "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.shsignifica "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)
Matt McClure avatar Nov 03 '2013 20:11 Matt McClure

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
Adam Dymitruk avatar Dec 08 '2011 18:12 Adam Dymitruk

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& lowerLimites el tocadoline_number

Puede encontrar más información aquí .

jitendrapurohit avatar Aug 13 '2015 09:08 jitendrapurohit

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 -Lla opción espera Rangecomo parámetro, no podemos obtener Blameuna sola línea usando la -Lopción` .

Referencia

Swaps avatar Nov 09 '2017 13:11 Swaps