En Git, ¿cómo podría comparar el mismo archivo entre dos confirmaciones diferentes (no contiguas) en la misma rama (maestro, por ejemplo)?
Estoy buscando una función de comparación como la de Visual SourceSafe (VSS) o Team Foundation Server (TFS).
¿Es posible en Git?
..
es realmente necesario, aunque funcionará con él (excepto en versiones bastante antiguas, tal vez). También puede usargit log
ogitk
encontrar SHA1 para usar, en caso de que las dos confirmaciones estén muy separadas.gitk
también tiene un "diff seleccionado -> esto" y "diff esto -> seleccionado" en su menú contextual.--
es útil, por ejemplo, cuando tiene un archivo llamado-p
. Bueno para usar en scripts, solo en casos raros necesarios en la práctica.También puede comparar dos archivos diferentes en dos revisiones diferentes, como esta:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
fuente
<file_1>
y<file_2>
se encuentran en el directorio actual, no en el directorio de nivel superior git administrado, uno tiene que anteponer./
en Unix:<revision_1>:./filename_1
Si ha configurado el "difftool" puede usar
Ejemplo: comparar un archivo de su último compromiso con su compromiso anterior en la misma rama: suponiendo que si está en la carpeta raíz del proyecto
Debe tener las siguientes entradas en su ~ / .gitconfig o en el archivo de proyecto / .git / config. Instale el p4merge [Esta es mi herramienta de combinación y diferencia preferida]
fuente
Verifique
$ git log
, copie la ID SHA-1 de las dos confirmaciones diferentes y ejecute elgit diff
comando con esas ID. por ejemplo:fuente
git diff (sha-id-one) (sha-id-two) -- filename.ext
sin el nombre del archivo, enumerará las diferencias de todos los archivos en esos dos commits.Si desea ver todos los cambios en el archivo entre las dos confirmaciones en una base de confirmación por confirmación, también puede hacer
git log -u $start_commit..$end_commit -- path/to/file
fuente
Aquí hay una secuencia de comandos Perl que imprime los comandos Git diff para un archivo dado como se encuentra en un comando de registro Git.
P.ej
Rendimientos:
que luego se puede cortar y pegar en una sesión de ventana de shell o canalizar
/bin/sh
.Notas:
Código:
fuente
Si desea hacer una diferencia con más de un archivo, con el método especificado por @mipadi:
Por ejemplo, diff
HEAD
y yourmaster
, para encontrar todos los.coffee
archivos:Esto buscará recursivamente
your_search_folder/
todos sus.coffee
archivos y hará una diferencia entre ellos y susmaster
versiones.fuente
Si tiene varios archivos o directorios y desea comparar confirmaciones no continuas, puede hacer esto:
Hacer una rama temporal ( "revisión" en este ejemplo)
Rebobinar hasta el primer objetivo de confirmación
Escogiendo cerezas en aquellos comprometidos interesados
Aplicar diff
Cuando termines
fuente
Solo otra forma de usar la genialidad de Git ...
fuente
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Si desea una comparación visual simple en Windows, como puede obtener en Visual SourceSafe o Team Foundation Server (TFS), intente esto:
Nota: Después de actualizar a Windows 10, he perdido las opciones del menú contextual de Git. Sin embargo, puede lograr lo mismo usando 'gitk' o 'gitk filename' en una ventana de comando.
Una vez que llame a 'Git History', se iniciará la herramienta Git GUI, con un historial del archivo en el panel superior izquierdo. Seleccione una de las versiones que le gustaría comparar. Luego haga clic derecho en la segunda versión y elija
Difundir esto -> seleccionado
o
Diferencia seleccionada -> esto
Las diferencias codificadas por colores aparecerán en el panel inferior izquierdo.
fuente