2010-03-25 15 views
182

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

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

Escenario

I clonado a partir de un repositorio e hicieron algunas confirmaciones de mi propia a mi repositorio local. Mientras tanto, mis colegas hicieron commits en el repositorio remoto. Ahora, quiero:

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

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

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

Mis hallazgos hasta ahora

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

Para el paso 3: Es , Supongo, solo un git pull.

+3

duplicado posible de [Comprobar si tirón necesario en Git ] (http://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git) –

+0

@Daniele que la respuesta a la que está enlazando es excelente e incluso viene con un script bash personalizable. +1 – gorbysbm

Respuesta

196

Puede git fetch origin actualizar la rama remota en su repositorio para que apunte a la última versión. Para un diff en el control remoto:

git diff origin/master 

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

Si desea aceptar los cambios remotas:

git merge origin/master 
+26

La diferencia se ve invertida. Me resulta más fácil usar 'git diff HEAD origin/master' para que el diff muestre lo que se aplicará si acepto los cambios remotos. – cbliard

+2

"git fetch origin" y "git show-branch * master" me resultaron útiles. –

33

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

git remote show origin 
+7

Pero ese comando no me muestra cuántos commits ha habido en "origen" desde mi última extracción, ¿o sí? La forma en que lo entendí, "git remote show origin" es una operación local y no pasa por la red para buscar información. – Lernkurve

11

Una posible solución

Gracias a Alan Haggai Alavi's solution 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 
+13

¿Por qué necesita hacer una bifurcación temporal para diff entre las revisiones del control remoto? puedes simplemente 'git diff origing/master^origing/master ^^' –

+0

@ PabloMarin-Garcia: Gracias. No lo sabía en ese entonces. – Lernkurve

126
git remote update && git status 

encontrado esto en la answer-Check if pull needed in Git

git remote update para actualizar sus refs remotos. A continuación, puede realice una de varias cosas, como por ejemplo:

  1. git status -uno le indicará si la rama que está realizando el seguimiento que está delante, detrás o ha divergido. Si no dice nada, el control remoto local y son iguales.

  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 utiliza -v con git remote update se puede ver que se ramifica consiguió actualiza, por lo que realmente no necesita más comandos.

+12

Esta debería ser la respuesta aceptada – mork

+0

¡La mejor manera de hacerlo! – mrt

+0

No es suficiente. Tengo que hacer un 'git pull ' luego tan pronto como necesite presionar, porque la punta de mi rama local estaba detrás de la contraparte remota. – Overdrivr

4

Mi pregunta es bastante normal "nada nuevo o cambiado en repo", por lo WhatChanged es muy útil. Lo encontré here.

git whatchanged origin/master -n 1 
+0

'whatchanged' parece estar en desuso: http://stackoverflow.com/a/18585297/33311 – Lernkurve

8

solo utilizo

git remote update 
git status 

Este último se informa cuántas confirmaciones detrás de mi local es. (Si lo hay)

continuación

git pull origin master 

para traer a mi local, hasta la fecha :)

0

git status no siempre muestra la diferencia entre el maestro y el origen/maestra, incluso después de una zona de alcance. Si desea que la combinación git fetch origin && git status para trabajar, es necesario que especifique la información de seguimiento entre la rama local y origen:

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

Por rama principal:

git branch --set-upstream-to=origin/master master 
Cuestiones relacionadas