remove - git tag push
Culpa de Git-¿los comicios previos? (12)
Es posible que desee revisar:
git gui blame <filename>
Le brinda una buena visualización gráfica de cambios como "culpa de git", pero con enlaces para hacer clic en cada línea, para pasar a las confirmaciones anteriores. Pase el cursor sobre los enlaces para obtener una ventana emergente con detalles de confirmación. No mis créditos ... lo encontré aquí:
http://zsoltfabok.com/blog/2012/02/git-blame-line-history/
git gui
es una interfaz gráfica Tcl / Tc para git. Sin ningún otro parámetro, se inicia una aplicación gráfica bastante simple pero útil para enviar archivos, archivos o incluso líneas simples y otros comandos similares como enmendar, revertir, empujar ... Es parte de la suite de acciones de Git. En Windows está incluido en el instalador. En debian, no sé sobre otros sistemas * nix, debe instalarse por separado:
apt-get install git-gui
De la documentación:
https://git-scm.com/docs/git-gui
DESCRIPCIÓN
Una interfaz gráfica de usuario basada en Tcl / Tk para Git. git gui se enfoca en permitir que los usuarios realicen cambios en su repositorio haciendo nuevos compromisos, modificando los existentes, creando sucursales, realizando fusiones locales y obteniendo / empujando a repositorios remotos.
A diferencia de gitk, git gui se centra en la generación de confirmaciones y la anotación de un solo archivo y no muestra el historial del proyecto. Sin embargo, proporciona acciones de menú para iniciar una sesión de gitk desde git gui.
Se sabe que git gui funciona en todos los sistemas UNIX populares, Mac OS X y Windows (tanto en Cygwin como en MSYS). En la medida de lo posible, se siguen las pautas de interfaz de usuario específicas del sistema operativo, lo que hace que git gui sea una interfaz bastante nativa para los usuarios.
Comandos
culpa
Inicie un visor de culpas en el archivo especificado en la versión dada (o en el directorio de trabajo si no está especificado).
navegador
Inicie un navegador de árbol que muestre todos los archivos en la confirmación especificada. Los archivos seleccionados a través del navegador se abren en el visor de la culpa.
citool
Inicie git gui y haga arreglos para hacer exactamente un commit antes de salir y regresar al shell. La interfaz está limitada a solo acciones de compromiso, reduciendo ligeramente el tiempo de inicio de la aplicación y simplificando la barra de menú.
versión
Muestra la versión actualmente en ejecución de git gui.
Me encanta el comando git blame
, es muy útil para rastrear a personas que no saben escribir código. :-)
Sin embargo, ¿es posible ver quién editó una línea específica antes de la confirmación reportada por git blame
, por ejemplo, un historial de confirmaciones para una línea dada?
Por ejemplo, ejecuto lo siguiente (en el excelente proyecto de uncrustify
):
$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
¿Cómo puedo saber quién editó esa línea antes de cometer fe25b6d
? ¿Y quién lo editó antes de que se comprometan? Estoy seguro de que esto sería posible, pero mi git-fu es débil.
La respuesta de Amber es correcta, pero me pareció poco clara; La sintaxis es:
git blame {sha1} -- {path/to/file}
Nota: el --
se usa para separar el árbol-ish sha1 de las rutas de archivo relativas. 1
Por ejemplo:
git blame master -- index.html
¡Todo el crédito para por saber todas las cosas! :)
Puede usar git log -L para ver la evolución de un rango de líneas.
Por ejemplo :
git log -L 15,23:filename.txt
significa "rastrear la evolución de las líneas 15 a 23 en el archivo llamado filename.txt".
Si está utilizando JetBrains Idea IDE (y derivados), puede seleccionar varias líneas, haga clic derecho en el menú contextual, luego Git -> Mostrar historial para selección. Verá una lista de confirmaciones que afectaron las líneas seleccionadas:
Sobre la base de la respuesta anterior, este bash one-liner debería darle lo que está buscando. Muestra el historial de git blames para una línea particular de un archivo en particular, a través de las últimas 5 revisiones:
LINE=10 FILE=src/options.cpp REVS=5; for commit in $(git rev-list -n $REVS HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done
En la salida de este comando, puede ver el contenido del cambio de línea, o el número de línea que se muestra puede incluso cambiar, para un compromiso en particular.
Esto a menudo indica que la línea se agregó por primera vez, después de ese compromiso en particular. También podría indicar que la línea se movió desde otra parte del archivo.
Sobre la base de la respuesta de DavidN y quiero seguir el nombre del archivo:
LINE=8 FILE=Info.plist; for commit in $(git log --format=''%h%%'' --name-only --follow -- $FILE | xargs echo | perl -pe ''s//%/s/,/g''); do hash=$(echo $commit | cut -f1 -d '',''); fileMayRenamed=$(echo $commit | cut -f2 -d '',''); git blame -n -L$LINE,+1 $hash -- $fileMayRenamed; done | sed ''$!N; /^/(.*/)/n/1$/!P; D''
ref: muestra bien el historial de renombrar archivos en el registro de git
Sobre la base de la respuesta de Will Shepard, su salida incluirá líneas duplicadas para confirmaciones donde no hubo cambios, por lo que puede filtrarlas de la siguiente manera (utilizando esta answer )
LINE=1 FILE=a; for commit in $(git rev-list HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done | sed ''$!N; /^/(.*/)/n/1$/!P; D''
Tenga en cuenta que eliminé el argumento REVS y esto vuelve a la confirmación de la raíz. Esto se debe a la observación de Max Nanasy arriba.
También hay recursive-blame
. Se puede instalar con
npm install -g recursive-blame
Una solución muy única para este problema es usar git log:
git log -p -M --sigue --stat - ruta / a / tu / archivo
Como lo explica Andre here
Utilizo este pequeño script de bash para ver el historial de culpas.
Primer parámetro: archivo a mirar
Parámetros posteriores: Pasado a git culpa.
#!/bin/bash
f=$1
shift
{ git log --pretty=format:%H -- "$f"; echo; } | {
while read hash; do
echo "--- $hash"
git blame $@ $hash -- "$f" | sed ''s/^/ /''
done
}
Puede proporcionar parámetros de culpabilidad como -L 70, + 10, pero es mejor usar la búsqueda de expresiones regulares de git blame porque los números de línea normalmente "cambian" con el tiempo.
en la answer , puse este script en mi PATH (incluso en Windows) como git-bh:
Eso me permite buscar todas las confirmaciones donde una palabra estuvo involucrada:
git bh path/to/myfile myWord
Guión:
#!/bin/bash
f=$1
shift
csha=""
{ git log --pretty=format:%H -- "$f"; echo; } | {
while read hash; do
res=$(git blame -L"/$1/",+1 $hash -- "$f" 2>/dev/null | sed ''s/^/ /'')
sha=${res%% (*}
if [[ "${res}" != "" && "${csha}" != "${sha}" ]]; then
echo "--- ${hash}"
echo "${res}"
csha="${sha}"
fi
done
}
git blame -L10,+1 fe25b6d^ -- src/options.cpp
Puede especificar una revisión para que Git Culpe mire hacia atrás a partir de (en lugar del valor predeterminado de HEAD
); fe25b6d^
es el padre de fe25b6d
.