¿Cómo verificar los cambios en el repositorio remoto (origen) de Git?

249

Pregunta

¿Cuáles son los comandos de Git para hacer el siguiente flujo de trabajo?

Guión

Cloné desde un repositorio e hice algunas confirmaciones propias en mi repositorio local. Mientras tanto, mis colegas se comprometieron con el repositorio remoto. Ahora quiero:

  1. Compruebe si hay nuevas confirmaciones de otras personas en el repositorio remoto, es decir origin.

  2. Dicen que hubo 3 nuevas confirmaciones en el repositorio remoto desde mi último tirón, me gustaría diff confirmaciones del repositorio remoto, es decir, HEAD~3con HEAD~2, HEAD~2con HEAD~1y HEAD~1con HEAD.

  3. Después de saber qué cambió de forma remota, quiero obtener las últimas confirmaciones de los demás.

Mis hallazgos hasta ahora

Para el paso 2: conozco la notación de intercalación HEAD^, HEAD^^etc. y la notación de tilde HEAD~2, HEAD~3etc.

Para el paso 3: Eso es, supongo, solo a git pull.

Lernkurve
fuente
3
Posible duplicado de Check si se necesita un tirón en Git
Daniele Orlando
@Daniele esa respuesta a la que estás vinculando es excelente e incluso viene con un script bash personalizable. +1
gorbysbm

Respuestas:

255

Podría git fetch originactualizar la rama remota en su repositorio para apuntar a la última versión. Para una diferencia contra el control remoto:

git diff origin/master

Sí, también puedes usar la notación de intercalación.

Si desea aceptar los cambios remotos:

git merge origin/master
Alan Haggai Alavi
fuente
34
La diferencia parece invertida. Me resulta más fácil de usar, git diff HEAD origin/masterpor lo que el diff muestra lo que se aplicará si acepto los cambios remotos.
cbliard
2
"git fetch origin" y "git show-branch * master" me fueron útiles.
Léa Massiot
159
git remote update && git status 

Encontré esto en la respuesta a Verificar si se necesita extracción en Git

git remote updatepara actualizar sus referencias remotas. Luego puede hacer una de varias cosas, como:

  1. git status -unole dirá si la rama que está rastreando está adelante, atrás o ha divergido. Si no dice nada, lo local y lo remoto son lo mismo.

  2. git show-branch *master le mostrará las confirmaciones en todas las ramas cuyos nombres terminan en maestro (por ejemplo, maestro y origen / maestro).

Si usa -vcon git remote update, puede ver qué ramas se actualizaron, por lo que realmente no necesita más comandos.

Rajani Karuturi
fuente
No es suficiente. Tengo que hacer un git pull <remote> <branch>después tan pronto como necesite empujar, porque la punta de mi sucursal local estaba detrás de la contraparte remota.
Overdrivr
3
@Overdrivr la pregunta solicita una forma de verificar los cambios antes de enviar los commits a la sucursal local. entonces, sí, debe actualizar su sucursal local después de verificar los cambios.
Rajani Karuturi
¿Esto es para origen remoto o ascendente?
vikramvi
1
Esa opción -v no funciona. Por lo git remote update -vque tengoerror: unknown switch `v'
Shad
1
@Shad que debe hacer git remote -v updatenogit remote update -v
Rajani Karuturi
34

Una buena manera de tener una visión sintética de lo que está sucediendo en el "origen" es:

git remote show origin
punta
fuente
11
Pero ese comando no me muestra cuántas confirmaciones ha habido en "origen" desde mi último tirón, ¿verdad? La forma en que lo entendí "git remote show origin" es una operación local y no va a través de la red para obtener información.
Lernkurve
24

Yo solo uso

git remote update
git status

Este último informa cuántos compromisos hay detrás de mi local. (Si alguna)

luego

git pull origin master

para actualizar mi local :)

Paul 501
fuente
13

Mi pregunta habitual es más bien "cualquier cosa nueva o cambiada en el repositorio", por lo que lo que cambia es útil. Lo encontré aquí .

git whatchanged origin/master -n 1
iceCode
fuente
1
nunca nuevo este comando existió. Gracias. esto es lo que estaba buscando
Saurabh Jain
11

Una posible solución

Gracias a la solución de Alan Haggai Alavi se me ocurrió el siguiente flujo de trabajo potencial:

Paso 1:

git fetch origin

Paso 2:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

Paso 3:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master
Lernkurve
fuente
13
¿Por qué necesita hacer una rama temporal para la diferencia entre las revisiones del control remoto? puedes simplementegit diff origing/master^ origing/master^^
Pablo Marin-Garcia
@ PabloMarin-Garcia: Gracias. No lo sabía en ese entonces.
Lernkurve
2

git statusNo siempre muestra la diferencia entre maestro y origen / maestro incluso después de una búsqueda. Si desea que la combinación git fetch origin && git statusfuncione, debe especificar la información de seguimiento entre la sucursal local y el origen:

# git branch --set-upstream-to=origin/<branch> <branch>

Para la rama maestra:

git branch --set-upstream-to=origin/master master
chacal
fuente
0

ya que no se ha sugerido hasta ahora ... y me parece bastante útil ...

simplemente uso

git fetch origin

para buscar los cambios remotos, y luego veo confirmaciones remotas locales y pendientes (y sus cambios asociados) con la buena herramienta gitk ( https://git-scm.com/docs/gitk ) que involucra el argumento --todos como

gitk --all
Rafael
fuente