¿Hay alguna manera de enumerar todas las confirmaciones que cambiaron un archivo específico?
¿Hay alguna manera de enumerar todas las confirmaciones que cambiaron un archivo específico?
Respuestas:
Los --follow
trabajos para un archivo en particular
git log --follow -- filename
Diferencia a otras soluciones dadas
Tenga en cuenta que otras soluciones incluyen git log path
(sin el --follow
). Ese enfoque es útil si desea realizar un seguimiento, por ejemplo, de los cambios en un directorio , pero se tambalea cuando se cambia el nombre de los archivos (por lo tanto, use --follow filename
).
--follow
representa los cambios de nombre, por lo que esto es más robusto quegit log -- path
--follow
acepta una ruta , que puede ser un archivo pero también un directorio. En el caso de este último, se ejecutará recursivamente e informará los cambios a todos los archivos por debajo de ese punto. (Este comportamiento no está documentado en la página de manual y puede no ser permanente.)
git log filename?
git log filename
no sigue el cambio de nombre del archivo, es decir, mostrará todas las confirmaciones con respecto a ese nombre de archivo (no archivo real). Si crea archivos X
y Y
, cambiado tanto, y luego borrado Y
y renombrado X
a Y
y luego también cambió, y se ejecuta git log Y
, obtendrá mensajes para ambos vieja Y
y la nueva uno. Y al contrario, con --follow
usted obtendrá confirmaciones con respecto a ese archivo cuando fue nombrado X
y cuando fue nombrado Y
.
git log path
Debes hacer lo que quieras. Del git log
hombre :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
He estado analizando esto de cerca y todas estas respuestas no parecen realmente mostrarme todos los compromisos en todas las ramas.
Esto es lo que se me ocurrió al jugar con las opciones de vista de edición de gitk. Esto me muestra todos los commits para un archivo, independientemente de la rama, local, reflog y remoto.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
También funciona con git log
:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflog
incluye confirmaciones que fueron modificadas / modificadas o descartadas. Tal vez eso debería ser obvio, ¡pero traté de usar esto git log
y estaba tratando de entender por qué estaba viendo confirmaciones aparentemente duplicadas!
Utilice el siguiente comando para obtener confirmaciones para un archivo específico:
git log -p filename
git log -p mybranch -- filename
o simplemente usar git log --all -- filename
para buscar en todas las ramas.
Debería ser tan simple como git log <somepath>
; verifique la página de manual ( git-log(1)
).
Personalmente, me gusta usar git log --stat <path>
para poder ver el impacto de cada confirmación en el archivo.
-p
si desea ver la diferencia completa, no solo que haya modificado algunas líneas.
git show
en los compromisos específicos que parecen ser importantes.
Alternativamente (desde Git 1.8.4), también es posible obtener todas las confirmaciones que han cambiado una parte específica de un archivo. Puede obtener esto pasando la línea de inicio y el número de línea final.
El resultado devuelto sería la lista de confirmaciones que modificaron esta parte en particular. El comando es como:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
donde upperLimit
está el start_line_number
y lowerLimit
es elending_line_number
Más información: https://www.techpurohit.com/list-some-useful-git-commands
Como señaló jackrabb1t, --follow
es más robusto ya que continúa enumerando la historia más allá de los cambios de nombre / movimientos. Por lo tanto, si está buscando un archivo que actualmente no está en la misma ruta o un archivo que ha sido renombrado a través de varias confirmaciones, --seguimiento lo rastreará.
Esta puede ser una mejor opción si desea visualizar los cambios de nombre / ruta:
git log --follow --name-status -- <path>
Pero si quieres una lista más compacta con solo lo que importa:
git log --follow --name-status --format='%H' -- <path>
o incluso
git log --follow --name-only --format='%H' -- <path>
La desventaja es que --follow
solo funciona para un solo archivo.
--follow
funciona para una sola ruta , que podría ser un directorio. Si se pasa un directorio, se ejecutará recursivamente e informará los cambios a todos los archivos debajo de ese punto.
Si está intentando: seguir un archivo eliminado en una confirmación anterior, use
git log --follow -- filename
git
novatos: use git log -p --follow -- filename
para mostrar los cambios también. También tenga en cuenta: "nombre de archivo" puede ser un archivo, un directorio o un submódulo.
Si desea ver todas las confirmaciones que cambiaron un archivo, en todas las ramas, use esto:
git log --follow --all <filepath>
Si desea buscar todas las confirmaciones por filename
y no por filepath
, use:
git log --all -- '*.wmv'
Si desea ver todos los cambios realizados en las confirmaciones que cambiaron un archivo en particular (en lugar de solo los cambios en el archivo en sí), puede pasar --full-diff
:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
Asumiendo que el paquete "gitk" ya está instalado.
Si no está instalado, haga esto:
sudo apt-get install gitk
Y luego intente el comando anterior. Es para Linux ... Podría ayudar a los usuarios de Linux si quieren una GUI.
gitk
se incluye con Git para Windows.
Para obtener una lista de los hashes de confirmación, use git rev-list
git rev-list HEAD <filename>
Salida:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
lo que significa que 5 commits han tocado este archivo. Es el orden cronológico inverso, por lo que la primera confirmación de la lista b7c4f0d7
es la más reciente.
En Linux puedes usar gitk para esto.
Se puede instalar usando "sudo apt-get install git-gui gitk". Se puede usar para ver confirmaciones de un archivo específico por "gitk <nombre de archivo>".
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>