Originalmente estaba intentando lo git diff HEAD origin/HEADque parece apuntar a una rama remota diferente de la que pretendía. Usar el nombre completo de la sucursal funciona como se esperaba.
Deanna
Respuestas:
595
Para actualizar las ramas de seguimiento remoto, git fetchprimero debe escribir y luego:
git diff <masterbranch_path> <remotebranch_path>
Puede git branch -aenumerar todas las sucursales (locales y remotas) y luego elegir el nombre de la sucursal de la lista (simplemente eliminar remotes/del nombre de la sucursal remota.
Ejemplo: git diff master origin/master(donde "maestro" es la rama maestra local y "origen / maestro" es una rama remota, a saber, origen y maestro).
Es posible que necesite una búsqueda antes ( git fetch)
Houssem Badri
Eso solo muestra un vistazo a los cambios en bash, ¿hay alguna forma de abrir todos los cambios en un IDE como el código VS?
Harsh Phoujdar
@ Harsh Phoujdar Agregue el siguiente código en su archivo .git / .gitconfig [diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = falseAsegúrese de que su ruta al archivo code.exe sea correcta.
Aman
1307
git diff <local branch> <remote>/<remote branch>
Por ejemplo git diff master origin/master, ogit diff featureA origin/next
Por supuesto, para tener dicha rama de seguimiento remoto,git fetch primero debe hacerlo ; y necesita que tenga información actualizada sobre las sucursales en el repositorio remoto.
para ser más exactos: git diff <sucursal local> <remote> / <sucursal remota>
finalmente el
38
Por lo general, hago git diff <remote>/<remote branch> <local branch>para ver qué hará mi empuje al repositorio remoto.
Michał Tatarynowicz
76
Incluso más corto git diff origines suficiente si solo se compara con su rama ascendente.
Ludder
12
agregue git fetchal principio, causa problemas a los novatos como yo
Saif
1
Oye, ¿no debería ser git diff <remote>/<remote branch> <local branch>? De lo contrario, obtengo las adiciones y eliminaciones activadas en mi computadora (git versión 2.7.0.windows.2)
Martín Coll
183
Primer tipo
git branch -a
para obtener la lista de sucursales disponibles. En la salida puede ver algo como
Definitivamente habría elegido esto como la respuesta. Siguiendo sus instrucciones, pude ver las diferencias entre una sucursal local y una sucursal remota. ¡Gracias!
Tass
1
Normalmente hago git log origin/my_branch..lo que tomaré HEADcomo referencia local, que es principalmente lo que quieres decir.
Rudie
44
+1 para la mejor respuesta en mi humilde opinión. Sería digno de +2 si menciona "buscar" para sincronizar la imagen "remota" de la fuente clonada. El paso de resumen de estadísticas / color es particularmente útil.
bvj
3
Gracias por la única respuesta que finalmente funcionó de las siete u ocho "respuestas" que resultaron en poco más que fatal: bad revisiono fatal: ambiguous argument. Todo lo que quería era ver la diferencia en el mismo archivo desde otra rama, ¿era demasiado pedir? Si, si lo fue. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>funciona muy bien en git 1.8.3.1
Steve Bonds
144
Si se encuentra en una rama determinada y desea compararla con una rama aguas arriba que está rastreando, use
git diff @{upstream}
si su upstream no está configurado (comúnmente el caso, gracias Arijoon en los comentarios)
<branchname>@{upstream}, por ejemplo master@{upstream}, @{u}
El sufijo
@{upstream}de un nombre de rama (forma abreviada <branchname>@{u}) se refiere a la rama que la rama especificada por branchnameestá configurada para construir encima (configurada con branch.<name>.remotey branch.<name>.merge). Un valor branchnamepredeterminado que falta es el actual.
Muy buena respuesta solo falta una pequeña parte. Cambia la línea a git diff @ @{upstream}. El extra @es HEAD, que es donde estás ahora, por lo que estás comparando HEADcon el flujo ascendente que tu rama está rastreando. Puede usar en @{push}lugar de aguas arriba para obtener diferencias entre la rama a la que está configurado para empujar
Arijoon el
3
mejor respuesta, no requiere buscar el control remoto. necesita más votos a favor!
jcomeau_ictx
3
En los crustáceos llegué resultado: fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree. Tuve que usar git diff @\{upstream\}en su lugar. 😥
Landon Kuhn
git fetchPrimero debe hacerlo , de lo contrario esto no hace nada, no muestra salida; probado eliminando un archivo en el origen del repositorio y ejecutó este comando localmente. ... funciona solo después de la búsqueda.
Además, como la respuesta dada incluye cualquier cambio local. a veces esto es deseado, otras veces, no.
Deanna
44
Entiendo mucho mejor la salida de:
git diff <remote-tracking branch> <local branch>
eso me muestra lo que se eliminará y lo que se agregará si presiono la rama local. Por supuesto, es lo mismo, solo lo inverso, pero para mí es más legible y me siento más cómodo mirando lo que va a suceder.
Obtengo exactamente el mismo resultado con: git diff <rama local> <rama de seguimiento remoto> o git diff <rama de seguimiento remoto> <rama local>
usuario2928048
32
La manera fácil:
git fetch
git log -p HEAD..FETCH_HEAD
Esto primero buscará los cambios desde su control remoto predeterminado (origen). Esto se creará automáticamente cuando clones un repositorio. También puede ser explícita: git fetch origin master.
Luego, git log se usa para comparar su rama actual con la que acaba de obtener. (La -popción (generar parche) es lo que muestra las diferencias ).
git fetch: todos buscarán todo, desde TODOS los controles remotos. git fetch debería ser suficiente si usa el origen remoto predeterminado.
Christophe Keller
Es sorprendente que después de 8 años, recibamos una respuesta completa que explica adecuadamente los pasos. Podemos hacer una ayuda para obtener los comandos. SO se trata de entenderlos.
gdbj
11
Deje que su rama de trabajo es el desarrollo y quieren diferenciar entre la rama de desarrollo local y remota rama de desarrollo, ese caso, la sintaxis debe ser como git diff remotes/origin/development..development
o
Aquí tengo dos ramas locales ( my-branchy master) y 4 a distancia ( some-branch, some-other-branch, master, ymy-branch ).
Además, el asterisco al lado de my-branchindica el hecho de que actualmente estoy en esa rama (también lo sabrías al usar el comando git statusque generaría:) On branch my-branch..
Nota: las ramas remotas en el shell git bash se muestran en rojo mientras que las locales se muestran en verde.
Para mostrar solo las sucursales locales, puede tener la tentación de usar, git branch -lpero ese es un comando completamente diferente. Para mostrar sucursales locales, use git branchsin opciones
$ git branch
* my-branch
master
Para completar una revisión de las opciones de bifurcación básicas, existe lo --listcontrario de lo que podría esperar para permitir el filtrado . Úselo con un patrón como este:
$ git branch --list 'my*'
* my-branch
También puede combinarse --listcon las opciones -ay -rasegurarse de adaptar su patrón en consecuencia ( recuerde: las ramas remotas comienzan con "controles remotos" ). Ejemplo:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
Ahora puede comparar dos ramas de todas las disponibles (también puede comparar dos locales o dos controles remotos).
Aquí estoy comparando lo local con lo remoto my-branch, están sincronizados para que no obtenga ninguna salida:
$ git diff my-branch remotes/origin/my-branch
Nota: debe dar los nombres completos de las ramas sin comillas.
También puedo comparar lo local my-branchcon lo remoto master. Aquí obtengo algo de salida porque el control remoto my-branchno se ha fusionado en la rama maestra.
Aquí hay una respuesta abreviada si está comparando su rama actual y algo que desea git pull.
git fetch
git diff FETCH_HEAD
El primer comando determinará qué rama remota corresponde a su rama actual. Un artefacto de ese cálculo en la FETCH_HEADreferencia. Luego, el segundo comando usa esa comparación de referencia frente a la que tiene su rama actual.
Sé que ya hay varias respuestas a esta pregunta, pero recibí un error extraño al intentar la mayoría de ellas.
En mi caso, tengo un segundo control remoto llamado herokuque no es el originy porque no estaba sincronizado, recibí este error al intentar ejecutar git diff master heroku/master:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
o esto al intentar el otro enfoque git diff master..heroku/master:
fatal: bad revision 'master..heroku/master'
La solución mencionaba explícitamente el nombre remoto git fetchantes de ejecutar git diff, en mi caso:
Creo que es interesante porque es una comparación que puedo hacer antes de comprometerme y presionar. Lamentablemente en Windows vimdiff para mostrar es feo; ¿Hay alguna forma de usar algo mejor, como notepad ++?
Stefano Scarpanti
3
Ejemplo
git diff 'master' 'testlocalBranch'
Si está utilizando un editor como Webstorm, puede hacer clic con el botón derecho en el archivo, seleccionar comparar con la rama y escribir / seleccionar su rama.
¿Qué agrega esto a la respuesta aceptada de 7.5 años con más de 170 votos a favor?
Mark Rotteveel
Esto es para mrblah el usuario o para usuarios similares que agregaron comentarios para la respuesta aceptada. La sintaxis es diferente de un ejemplo y el ejemplo ayuda más desde el punto de vista del principiante.
Kurkula
2
En ese caso, debería estar en comentario de esa respuesta.
rachit
1
En VS 2019, solo haga FETCH No extraiga el código.
Esto es lo que hice. Se agrega a continuación en el archivo .gitconfig para que pueda usar Beyond Compare
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
Diferenciando con una rama remota arbitraria
Esto responde la pregunta en su encabezado ("su control remoto"); si quiere diferenciar "un control remoto" (que no está configurado como el flujo ascendente para la rama), debe apuntarlo directamente. Puede ver todas las ramas remotas con lo siguiente:
git branch -r
Puede ver todos los controles remotos configurados con lo siguiente:
git remote show
Puede ver la configuración de sucursal / seguimiento para un único control remoto (por ejemplo, origen) de la siguiente manera:
git remote show origin
Una vez que determine la rama de origen apropiada, simplemente haga una diferencia normal :)
Si usa TortoiseGit (proporciona GUI para Git), puede hacer clic derecho en su carpeta de repositorio de Git y luego hacer clic Git Sync.
Puede seleccionar sus sucursales para comparar si no está seleccionado. Entonces puedes ver las diferencias confirmar. También puede hacer clic con el botón derecho en cualquier confirmación Compare with previous revisionpara ver las diferencias una al lado de la otra.
git diff HEAD origin/HEAD
que parece apuntar a una rama remota diferente de la que pretendía. Usar el nombre completo de la sucursal funciona como se esperaba.Respuestas:
Para actualizar las ramas de seguimiento remoto,
git fetch
primero debe escribir y luego:Puede
git branch -a
enumerar todas las sucursales (locales y remotas) y luego elegir el nombre de la sucursal de la lista (simplemente eliminarremotes/
del nombre de la sucursal remota.Ejemplo:
git diff master origin/master
(donde "maestro" es la rama maestra local y "origen / maestro" es una rama remota, a saber, origen y maestro).fuente
git fetch
)[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
Asegúrese de que su ruta al archivo code.exe sea correcta.Por ejemplo
git diff master origin/master
, ogit diff featureA origin/next
Por supuesto, para tener dicha rama de seguimiento remoto,
git fetch
primero debe hacerlo ; y necesita que tenga información actualizada sobre las sucursales en el repositorio remoto.fuente
git diff <remote>/<remote branch> <local branch>
para ver qué hará mi empuje al repositorio remoto.git diff origin
es suficiente si solo se compara con su rama ascendente.git fetch
al principio, causa problemas a los novatos como yogit diff <remote>/<remote branch> <local branch>
? De lo contrario, obtengo las adiciones y eliminaciones activadas en mi computadora (git versión 2.7.0.windows.2)Primer tipo
para obtener la lista de sucursales disponibles. En la salida puede ver algo como
Luego muestra la diferencia
fuente
...
más que..
?git log origin/my_branch..
lo que tomaréHEAD
como referencia local, que es principalmente lo que quieres decir.fatal: bad revision
ofatal: ambiguous argument
. Todo lo que quería era ver la diferencia en el mismo archivo desde otra rama, ¿era demasiado pedir? Si, si lo fue. :-)git diff remotes/origin/<base branch> <current branch> -- <filename>
funciona muy bien en git 1.8.3.1Si se encuentra en una rama determinada y desea compararla con una rama aguas arriba que está rastreando, use
si su upstream no está configurado (comúnmente el caso, gracias Arijoon en los comentarios)
Cortesía de esta respuesta , la documentación de git para especificar revisiones tiene:
fuente
git diff @ @{upstream}
. El extra@
esHEAD
, que es donde estás ahora, por lo que estás comparandoHEAD
con el flujo ascendente que tu rama está rastreando. Puede usar en@{push}
lugar de aguas arriba para obtener diferencias entre la rama a la que está configurado para empujarfatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Tuve que usargit diff @\{upstream\}
en su lugar. 😥git fetch
Primero debe hacerlo , de lo contrario esto no hace nada, no muestra salida; probado eliminando un archivo en el origen del repositorio y ejecutó este comando localmente. ... funciona solo después de la búsqueda.Entiendo mucho mejor la salida de:
git diff <remote-tracking branch> <local branch>
eso me muestra lo que se eliminará y lo que se agregará si presiono la rama local. Por supuesto, es lo mismo, solo lo inverso, pero para mí es más legible y me siento más cómodo mirando lo que va a suceder.
fuente
La manera fácil:
Esto primero buscará los cambios desde su control remoto predeterminado (origen). Esto se creará automáticamente cuando clones un repositorio. También puede ser explícita:
git fetch origin master
.Luego, git log se usa para comparar su rama actual con la que acaba de obtener. (La
-p
opción (generar parche) es lo que muestra las diferencias ).fuente
Así es como lo hago.
esto buscará todo desde el control remoto, por lo que cuando verifique la diferencia, comparará la diferencia con la rama remota.
El comando anterior mostrará todas las ramas.
Ahora, puede verificar la diferencia de la siguiente manera.
esto comparará su sucursal local con la sucursal remota
fuente
Deje que su rama de trabajo es el desarrollo y quieren diferenciar entre la rama de desarrollo local y remota rama de desarrollo, ese caso, la sintaxis debe ser como
git diff remotes/origin/development..development
o
git fetch origin git diff origin/development
fuente
tl; dr :
git diff <local branch> <remote branch>
Cuando uso git en el caparazón, me gusta orientarme primero mirando alrededor. Aquí hay un comando para mostrar todas las ramas
Aquí tengo dos ramas locales (
my-branch
ymaster
) y 4 a distancia (some-branch
,some-other-branch
,master
, ymy-branch
).Además, el asterisco al lado de
my-branch
indica el hecho de que actualmente estoy en esa rama (también lo sabrías al usar el comandogit status
que generaría:)On branch my-branch.
.Nota: las ramas remotas en el shell git bash se muestran en rojo mientras que las locales se muestran en verde.
Si solo desea mostrar sucursales remotas :
Para mostrar solo las sucursales locales, puede tener la tentación de usar,
git branch -l
pero ese es un comando completamente diferente. Para mostrar sucursales locales, usegit branch
sin opcionesPara completar una revisión de las opciones de bifurcación básicas, existe lo
--list
contrario de lo que podría esperar para permitir el filtrado . Úselo con un patrón como este:También puede combinarse
--list
con las opciones-a
y-r
asegurarse de adaptar su patrón en consecuencia ( recuerde: las ramas remotas comienzan con "controles remotos" ). Ejemplo:Documentos: https://git-scm.com/docs/git-branch
Ahora puede comparar dos ramas de todas las disponibles (también puede comparar dos locales o dos controles remotos).
Aquí estoy comparando lo local con lo remoto
my-branch
, están sincronizados para que no obtenga ninguna salida:Nota: debe dar los nombres completos de las ramas sin comillas.
También puedo comparar lo local
my-branch
con lo remotomaster
. Aquí obtengo algo de salida porque el control remotomy-branch
no se ha fusionado en la rama maestra.fuente
Si desea ver la diferencia como solo cambiaron los nombres de los archivos, use: de lo contrario
git diff --name-status <remote-branch> <local-branch>
,esto mostrará todas las diferencias entre las dos ramas:
git diff <remote-branch> <local-branch>
fuente
Aquí hay una respuesta abreviada si está comparando su rama actual y algo que desea
git pull
.El primer comando determinará qué rama remota corresponde a su rama actual. Un artefacto de ese cálculo en la
FETCH_HEAD
referencia. Luego, el segundo comando usa esa comparación de referencia frente a la que tiene su rama actual.fuente
Sé que ya hay varias respuestas a esta pregunta, pero recibí un error extraño al intentar la mayoría de ellas.
En mi caso, tengo un segundo control remoto llamado
heroku
que no es elorigin
y porque no estaba sincronizado, recibí este error al intentar ejecutargit diff master heroku/master
:fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
o esto al intentar el otro enfoque
git diff master..heroku/master
:fatal: bad revision 'master..heroku/master'
La solución mencionaba explícitamente el nombre remoto
git fetch
antes de ejecutargit diff
, en mi caso:Espero que ayude a otros con este mismo problema.
fuente
Esto comparará la confirmación que desea con sus archivos locales. No olvides el punto al final (para local).
Por ejemplo, para comparar sus archivos locales con alguna confirmación:
(y no necesita git fetch, a menos que sea necesario comparar con nuevos commits)
fuente
Ejemplo
Si está utilizando un editor como Webstorm, puede hacer clic con el botón derecho en el archivo, seleccionar comparar con la rama y escribir / seleccionar su rama.
fuente
En VS 2019, solo haga FETCH No extraiga el código.
Esto es lo que hice. Se agrega a continuación en el archivo .gitconfig para que pueda usar Beyond Compare
Agregado a continuación
Abra el símbolo del sistema y vaya al directorio de trabajo. Di a continuación para comparar la sucursal de DEV local con la sucursal de DEV remota
Esto abrirá Beyond Compare y abrirá directorios que tienen archivos diferentes. Si no hay cambios, Beyond Compare no se iniciará.
fuente
Me pregunto si hay algún cambio en mi rama maestra ...
fuente
Preparar
git config alias.udiff 'diff @{u}'
Diferenciando HEAD con HEAD @ {upstream}
Diferenciando con una rama remota arbitraria
Esto responde la pregunta en su encabezado ("su control remoto"); si quiere diferenciar "un control remoto" (que no está configurado como el flujo ascendente para la rama), debe apuntarlo directamente. Puede ver todas las ramas remotas con lo siguiente:
git branch -r
Puede ver todos los controles remotos configurados con lo siguiente:
git remote show
Puede ver la configuración de sucursal / seguimiento para un único control remoto (por ejemplo, origen) de la siguiente manera:
git remote show origin
Una vez que determine la rama de origen apropiada, simplemente haga una diferencia normal :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
fuente
Esto es bastante simple Puedes usar:
git diff remote/my_topic_branch my_topic_branch
¿Dónde
my_topic_branch
está tu rama temática?fuente
Digamos que ya ha configurado su
origin
como repositorio remoto. Entonces,git diff <local branch> <origin>/<remote branch name>
fuente
tratar:
Suponiendo que desea diferenciar sus sucursales locales actuales
HEAD
contra el origen. Y suponiendo que esté en la sucursal local. :)fuente
Si usa TortoiseGit (proporciona GUI para Git), puede hacer clic derecho en su carpeta de repositorio de Git y luego hacer clic
Git Sync
.Puede seleccionar sus sucursales para comparar si no está seleccionado. Entonces puedes ver las diferencias confirmar. También puede hacer clic con el botón derecho en cualquier confirmación
Compare with previous revision
para ver las diferencias una al lado de la otra.fuente