¿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 --followtrabajos 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).
--followrepresenta los cambios de nombre, por lo que esto es más robusto quegit log -- path
--followacepta 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 filenameno 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 Xy Y, cambiado tanto, y luego borrado Yy renombrado Xa Yy luego también cambió, y se ejecuta git log Y, obtendrá mensajes para ambos vieja Y y la nueva uno. Y al contrario, con --followusted obtendrá confirmaciones con respecto a ese archivo cuando fue nombrado X y cuando fue nombrado Y.
git log pathDebes hacer lo que quieras. Del git loghombre :
[--] <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
--reflogincluye confirmaciones que fueron modificadas / modificadas o descartadas. Tal vez eso debería ser obvio, ¡pero traté de usar esto git logy 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 -- filenameo simplemente usar git log --all -- filenamepara 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.
-psi desea ver la diferencia completa, no solo que haya modificado algunas líneas.
git showen 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 upperLimitestá el start_line_numbery lowerLimites elending_line_number
Más información: https://www.techpurohit.com/list-some-useful-git-commands
Como señaló jackrabb1t, --followes 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 --followsolo funciona para un solo archivo.
--followfunciona 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
gitnovatos: use git log -p --follow -- filenamepara 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 filenamey 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.
gitkse 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 b7c4f0d7es 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>