subir - ¿Cómo comparar una rama git local con su rama remota?
subir rama local a remoto (16)
Preparar
git config alias.udiff ''diff @{u}''
Difundiendo HEAD con HEAD @ {upstream}
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
Difiriendo con una rama remota arbitraria
Esto responde a la pregunta en su encabezado ("su control remoto"); Si desea diferenciar contra "un control remoto" (que no está configurado como upstream para la rama), debe apuntarlo directamente. Puedes ver todas las ramas remotas con lo siguiente:
git branch -r
Puedes ver todos los controles remotos configurados con lo siguiente:
git remote show
Puede ver la configuración de sucursal / seguimiento para un solo 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
¿Cómo puedo ver la diff
entre una sucursal local y una remota?
Aquí está una respuesta abreviada si está comparando su rama actual y con 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 referencia FETCH_HEAD
. Luego, el segundo comando usa esa comparación de referencia en comparación con lo que tiene tu rama actual.
Así es como lo hago.
#To update your local.
git fetch --all
esto capturará todo desde el control remoto, de modo 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 comprobar 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 sea desarrollo y desee diferenciar entre rama de desarrollo local y rama de desarrollo remoto, en ese caso, la sintaxis debería ser como los git diff remotes/origin/development..development
o
git fetch origin git diff origin/development
Entiendo mucho mejor la salida de:
git diff <remote-tracking branch> <local branch>
eso me muestra lo que se va a eliminar y lo que se agregará si presiono la sucursal local. Por supuesto, es lo mismo, solo lo inverso, pero para mí es más legible y me siento más cómodo al ver lo que va a suceder.
La manera fácil:
git fetch
git log -p HEAD..FETCH_HEAD
Esto primero recogerá los cambios de su control remoto predeterminado (origen). Esto se creará automáticamente cuando clones un repositorio. También puedes ser explícito: git fetch origin master
.
Luego, git log se usa para comparar tu rama actual con la que acabas de obtener. (La opción -p
(generar parche) es la que muestra las diferencias ).
Me pregunto si hay algún cambio en mi rama maestra ...
- En primer lugar, necesita cambiar su sucursal (si ya está bajo esta sucursal, ¡no necesita hacer esto!)
git checkout master
- Puede ver qué archivo ha sido modificado bajo su rama maestra por este comando
estado de git
- Listar las ramas
rama git -a
- dominar
mandos a distancia / origen / maestro
- Encuentra las diferencias
git diff origin / master
Para actualizar las sucursales de seguimiento remoto, primero debe escribir git fetch
y luego:
git diff <masterbranch_path> <remotebranch_path>
Puede git branch -a
para enumerar todas las sucursales (local y remota) y luego elegir el nombre de la rama de la lista (solo quite los remotes/
del nombre de la rama remota).
Ejemplo: git diff master origin/master
(donde "master" es la rama maestra local y "origin / master" es una rama remota y maestra, a saber, el origen).
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
Entonces muestra el diff
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
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 como no estaba sincronizado, recibí este error al intentar ejecutar el 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 fue mencionar explícitamente el nombre remoto en 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.
Si desea ver la diferencia, ya que solo se cambiaron los nombres de los archivos, utilice:
git diff --name-status <remote-branch> <local-branch>
,
de lo contrario esto mostraría todas las diferencias entre las dos ramas:
git diff <remote-branch> <local-branch>
Si está en una sucursal determinada y desea compararla con una sucursal ascendente que está rastreando, use
git diff @{upstream}
Cortesía de esta respuesta , la documentación de git para especificar revisiones tiene:
<branchname>@{upstream}
, por ejemplo,master@{upstream}
,@{u}
El sufijo@{upstream}
a un nombre de rama (forma corta<branchname>@{u}
) se refiere a la rama que la rama especificada porbranchname
debranchname
está configurada para construir sobre (configurada conbranch.<name>.remote
ybranch.<name>.merge
). Un nombre debranchname
faltantebranchname
defecto es el actual.
tl; dr : git diff <local branch> <remote branch>
Cuando uso git en la cáscara, primero me gusta orientarme 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 sucursales locales ( my-branch
y master
) y 4 remotas ( some-branch
, some-other-branch
, master
y my-branch
).
Además, el asterisco junto a my-branch
señala el hecho de que actualmente estoy en esa rama (también sabría que 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 quieres mostrar ramas 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 las 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, está la lista - que, contrariamente a lo que podría esperar, está ahí para permitir el filtrado . Úsalo con un patrón como este:
$ git branch --list ''my*''
* my-branch
También puede combinar --list
con las opciones -a
-r
pero asegúrese de adaptar su patrón en consecuencia ( recuerde: las ramas remotas comienzan con "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
Docs: https://git-scm.com/docs/git-branch
Ahora puede comparar dos sucursales de todas las disponibles (también puede comparar dos locales o dos controles remotos).
Aquí estoy comparando el local con el remoto my-branch
, están sincronizados, así que no obtengo ningún resultado:
$ git diff my-branch remotes/origin/my-branch
Nota: debe dar los nombres completos de las ramas sin comillas.
También puedo comparar el my-branch
local con el master
remoto. Aquí obtengo algunos resultados porque el 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
[ . . . ]
git diff <local branch> <remote>/<remote branch>
Por ejemplo, git diff master origin/master
, o git diff featureA origin/next
Por supuesto, para tener dicha rama de seguimiento remoto es necesario git fetch
primero git fetch
; y lo necesita para tener información actualizada sobre las sucursales en el repositorio remoto.
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 tus archivos locales con algún commit:
git diftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(y no necesita git fetch, a menos que sea necesario comparar con nuevos confirmaciones)