git diff
puede mostrarle la diferencia entre dos confirmaciones:
git diff mybranch master -- myfile.cs
O equivalente:
git diff mybranch..master -- myfile.cs
Usando la última sintaxis, si cualquiera de los dos lados HEAD
se puede omitir (por ejemplo, se master..
compara master
con HEAD
).
También te puede interesar mybranch...master
(de git diff
documentos ):
Este formulario es para ver los cambios en la rama que contiene y hasta el segundo <commit>
, comenzando en un antepasado común de ambos <commit>
. git diff A...B
es equivalente a git diff $(git-merge-base A B) B
.
En otras palabras, esto dará una diferencia de cambios en master
ya que divergió de mybranch
(pero sin nuevos cambios desde entonces en mybranch
).
En todos los casos, el --
separador antes del nombre del archivo indica el final de los indicadores de la línea de comando. Esto es opcional a menos que Git se confunda si el argumento se refiere a un commit o un archivo, pero incluirlo no es un mal hábito. Consulte https://stackoverflow.com/a/13321491/54249 para ver algunos ejemplos.
Se pueden pasar los mismos argumentos git difftool
si tiene uno configurado.
git diff branch1 branch2 myfile.cs
. (Esto--
ya no debería ser necesario, ya que solo puede tomar hasta dos argumentos de revisión.)--
error común y fácil de hacer.)git diff --name-status branch1..branch2
(probablemente obvio, pero pensé en mencionarlo en caso de que alguien más tenga el mismo problema que yo).Puedes hacerlo:
git diff branch1:path/to/file branch2:path/to/file
Si tiene difftool configurado, entonces también puede:
git difftool branch1:path/to/file branch2:path/to/file
Pregunta relacionada: ¿Cómo veo la salida de git diff con el programa visual diff
fuente
branch1:./file
). Esto también es útil si el archivo está en una ubicación separada entre las ramas (por ejemplogit diff branch1:old/path/to/file branch2:new/path/to/file
).git diff branch1 branch2 path/to/file
.Sintaxis más moderna:
git diff ..master path/to/file
El prefijo de doble punto significa "del directorio de trabajo actual a". También puede decir:
master..
, es decir, el reverso de lo anterior. Esto es lo mismo quemaster
.mybranch..master
, haciendo referencia explícita a un estado que no sea el árbol de trabajo actual.v2.0.1..master
, es decir, hacer referencia a una etiqueta.[refspec]..[refspec]
, básicamente cualquier cosa identificable como un estado de código para git.fuente
Hay muchas formas de comparar archivos de dos ramas diferentes:
Opción 1: si desea comparar el archivo de una rama específica a otra rama específica:
Ejemplo:
Opción 2: forma simple:
Ejemplo:
Opción 3: si desea comparar su directorio de trabajo actual con alguna rama:
Ejemplo:
fuente
Yo simplemente hago
git diff branch1 branch2 path/to/file
Esto comprueba las diferencias entre los archivos. Los cambios en
branch1
estarían en rojo. Los cambiosbranch2
serían en verde.Se supone que
branch1
es el pasado ybranch2
el futuro. Puede revertir esto invirtiendo el orden de las ramas en el diff:git diff branch2 branch1
fuente
Si desea hacer una diferencia con la rama actual, puede omitirla y usar:
git diff $BRANCH -- path/to/file
de esta manera diferirá de la rama actual a la rama referenciada (
$BRANCH
).fuente
De acuerdo con la respuesta sugerida por @dahlbyk. Si desea que el diff se escriba en un archivo diff para revisiones de código, use el siguiente comando.
fuente
En mi caso, uso el siguiente comando:
Este comando puede ayudarlo a comparar el mismo archivo en dos ramas diferentes
fuente
La mejor manera de hacerlo es mediante el uso
git diff
de la siguiente manera:git diff <source_branch> <target_branch> -- file_path
Verificará la diferencia entre los archivos en esas ramas. Eche un vistazo a este artículo para obtener más información sobre los comandos git y cómo funcionan.
fuente
Use commit hashes como este:
donde hash1 puede ser cualquier commit de cualquier rama, lo mismo para hash2 .
fuente
Hay dos escenarios para comparar archivos:
Escenario 1: Comparar archivos en sucursales remotas (ambas ramas deben existir en el repositorio remoto)
Escenario 2: compare los archivos locales (en la copia del área de trabajo local) con los archivos del repositorio remoto.
La lógica es simple. Si proporciona dos nombres de rama para diferenciar, siempre comparará las ramas remotas, y si proporciona solo un nombre de rama, siempre comparará su copia de trabajo local con el repositorio remoto (el que proporcionó). Puede usar el rango para proporcionar repositorios remotos.
Por ejemplo, pagar una sucursal
en este caso, si proporciona el nombre del archivo, comparará su copia local del nombre del archivo con la rama remota llamada " rama2 ".
en este caso, comparará el nombre de archivo de las ramas remotas llamadas " branch1 " versus " branch2 "
en este caso también, comparará el nombre de archivo de las ramas remotas llamadas " branch1 " versus " branch2 ". Entonces, es lo mismo que arriba. Sin embargo, si acaba de crear una rama de otra rama, diga "maestro" y su rama actual no existe en el repositorio remoto, comparará " maestro " remoto con " rama2 " remota .
Espero que sea útil.
fuente
Para comparar dos archivos en git bash, debe usar el comando:
Este comando mostrará la diferencia entre los dos archivos en la propia bash.
fuente