¿Cómo puedo ver diff
entre una sucursal local y una sucursal remota?
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.
¿Cómo puedo ver diff
entre una sucursal local y una sucursal remota?
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:
git diff <masterbranch_path> <remotebranch_path>
Puede git branch -a
enumerar 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).
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.
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.
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 yo
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)
Primer tipo
git branch -a
para obtener la lista de sucursales disponibles. En la salida puede ver algo como
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
Luego muestra la diferencia
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
...
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
o 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
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)
git diff @{push}
Cortesía de esta respuesta , la documentación de git para especificar revisiones tiene:
<branchname>@{upstream}
, por ejemplomaster@{upstream}
,@{u}
El sufijo@{upstream}
de un nombre de rama (forma abreviada<branchname>@{u}
) se refiere a la rama que la rama especificada porbranchname
está configurada para construir encima (configurada conbranch.<name>.remote
ybranch.<name>.merge
). Un valorbranchname
predeterminado que falta es el actual.
git diff @ @{upstream}
. El extra @
es HEAD
, que es donde estás ahora, por lo que estás comparando HEAD
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 empujar
fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
. Tuve que usar git 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.
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 -p
opción (generar parche) es lo que muestra las diferencias ).
Así es como lo hago.
#To update your local.
git fetch --all
esto buscará todo desde el control remoto, por lo que cuando verifique la diferencia, comparará la diferencia con la rama remota.
#to list all branches
git branch -a
El comando anterior mostrará todas las ramas.
#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
(or)
git status
Ahora, puede verificar la diferencia de la siguiente manera.
git diff origin/<branch_name>
esto comparará su sucursal local con la sucursal remota
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
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
$ git branch -a # (or git branch --all)
* my-branch
master
remotes/origin/some-branch
remotes/origin/HEAD -> origin/master
remotes/origin/my-branch
remotes/origin/some-other-branch
remotes/origin/master
Aquí tengo dos ramas locales ( my-branch
y master
) 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 comando git 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 :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
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, use git branch
sin opciones
$ git branch
* my-branch
master
Para 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:
$ git branch --list 'my*'
* my-branch
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:
# 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
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:
$ 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-branch
con lo remoto master
. Aquí obtengo algo de salida porque el control remoto my-branch
no se ha fusionado en la rama maestra.
$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
/*
* Function: doCall
[ . . . ]
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>
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_HEAD
referencia. 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 heroku
que no es el origin
y 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 fetch
antes de ejecutar git diff
, en mi caso:
$ git fetch heroku
$ git diff master heroku/master
Espero que ayude a otros con este mismo problema.
git difftool <commit> .
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:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(y no necesita git fetch, a menos que sea necesario comparar con nuevos commits)
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.
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
File location: C:\Users\[username]\.gitconfig
Agregado a continuación
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
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
git difftool dev origin/dev --dir-diff
Esto abrirá Beyond Compare y abrirá directorios que tienen archivos diferentes. Si no hay cambios, Beyond Compare no se iniciará.
Me pregunto si hay algún cambio en mi rama maestra ...
git checkout master
estado git
git branch -a
controles remotos maestros / origen / maestro
origen / maestro git diff
git config alias.udiff 'diff @{u}'
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
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
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?
tratar:
git diff origin HEAD
Suponiendo que desea diferenciar sus sucursales locales actuales HEAD
contra el origen. Y suponiendo que esté en la sucursal local. :)
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.