git diff entre el repositorio remoto clonado y el original

170

He clonado un repositorio de github y no he realizado cambios a nivel local. El repositorio de Github avanzó con commits en la misma rama.

  1. ¿Cómo encuentro una diferencia entre mi repositorio local y el repositorio original de github?
  2. ¿Cómo encuentro una diferencia entre mi copia de trabajo y el repositorio original de github?
  3. ¿Cómo encuentro una diferencia entre mi repositorio local y otro repositorio github del mismo proyecto?
Oleg Proudnikov
fuente
1
posible duplicado de comparar la rama local de git con la rama remota?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功: Creo que es lo suficientemente diferente: la otra pregunta se refiere a cualquier rama remota genérica, mientras que esto es con referencia a GitHub, además de tres puntos de partida diferentes. Definitivamente son similares, por lo que su enlace es ciertamente útil.
jvriesem

Respuestas:

161

1) Agregue cualquier repositorio remoto que desee comparar:

git remote add foobar git://github.com/user/foobar.git

2) Actualice su copia local de un control remoto:

git fetch foobar

Fetch no cambiará tu copia de trabajo.

3) Compare cualquier rama de su repositorio local con cualquier control remoto que haya agregado:

git diff master foobar/master
dbyrne
fuente
¿Necesitaré git fetch antes de diff? Supongo que no hay forma de diferenciarse sin él.
Oleg Proudnikov
Esta es en realidad una respuesta a la pregunta 3 solamente (dif con otro repositorio de github).
Ruslan Kabalin
55
Nada distingue el "repositorio original de github" de ningún otro repositorio remoto. ¿O estoy malentendido algo?
dbyrne
Cuando lo probé con git 2.7.4, el "git diff master foobar / master" no mostró diferencias. Me parece que compara mi copia local ("master") con el repositorio dado como primer argumento ("master") y allí solo difiere la "ruta / archivo" "foobar / master". Pero el comando "diff foobar / master" funcionó para mí, comparando mi maestro local con foobar / master.
user2081279
En lugar de fetch(nr. 2) como alternativa: git remote update- actualizará todas sus ramas configuradas para rastrear las remotas, pero no fusionará ningún cambio en; ogit pull
Timo
49

Otra respuesta a sus preguntas (suponiendo que esté en el maestro y que ya haya "git fetch origin" para informarle sobre cambios remotos):

1) Se compromete en una sucursal remota desde que se creó la sucursal local:

git diff HEAD...origin/master

2) Supongo que por "copia de trabajo" te refieres a tu sucursal local con algunas confirmaciones locales que aún no están en remoto. Para ver las diferencias de lo que tiene en su sucursal local pero que no existe en la ejecución remota de la sucursal:

git diff origin/master...HEAD

3) Ver la respuesta de dbyrne.

Ruslan Kabalin
fuente
¡Gracias por la HEAD..origin/mastersintaxis! Hemos estado recibiendo errores con origen / HEAD no existente, y esto lo resolvió.
Dan Bechard el
@ruslan: ¿qué significa cuando git diff HEAD...origin/masterno devuelve nada si he clonado un directorio remoto en el que estoy autorizado para realizar cambios?
Mona Jalal
Se produjo un error cuando estaba clonando con la GUI de Windows, por lo tanto, me pregunto si el clon se realizó por completo. Veo que las carpetas están aquí en mi directorio pero quiero asegurarme de que sea lo mismo que remoto. Sin embargo, en git shell, git diff no devuelve nada. ¿Estoy confundido si mi clon ha tenido éxito o no?
Mona Jalal
@MonaJalal significa que no hay cambios aguas arriba desde que lo clonaste.
Ruslan Kabalin
21

Este ejemplo podría ayudar a alguien:

Nota " origin" es mi alias para remoto "Lo que está en Github"
Nota " mybranch" es mi alias para mi rama "lo que es local" que estoy sincronizando con github
: su nombre de rama es 'maestro' si no creó uno. Sin embargo, estoy usando un nombre diferente mybranchpara mostrar dónde se usa el parámetro de nombre de rama.


¿Cuáles son exactamente mis repositorios remotos en github?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

Agregue el "otro repositorio de github del mismo código" - lo llamamos fork:

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

asegúrese de que nuestro repositorio local esté actualizado:

$ git fetch

Cambiar algunas cosas localmente. digamos archivo ./foo/bar.py

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

Revisar mis cambios no confirmados

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

Comprometerse localmente.

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

Ahora, soy diferente a mi control remoto (en github)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

Difunde esto con el control remoto: su tenedor: (esto se hace con frecuencia con git diff master origin)

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(Git push para aplicarlos al control remoto)

¿Cómo difiere mi rama remota de la rama maestra remota?

$ git diff origin/mybranch origin/master

¿Cómo difieren mis cosas locales de la rama maestra remota?

$ git diff origin/master

¿En qué se diferencian mis cosas del tenedor de otra persona, rama maestra del mismo repositorio?

$git diff mybranch someOtherRepo/master
FlipMcF
fuente
55
Antes de hacer un 'git diff', creo que es necesario hacer un 'git fetch' para asegurarnos de que nuestra copia local del control remoto esté actualizada.
Don
1
Leí quizás 20 publicaciones sobre cómo comparar lo remoto y lo local. Lo descubrí yo mismo: primero se requiere git fetch. git es realmente el código de ensamblaje de RCS. Jesús. Gracias por confirmar, Don!
Terence Parr
Acabo de agregar git fetcha esta respuesta.
FlipMcF
1
Hummm ... No me gusta cómo usé 'myfork' como mi nombre de sucursal. Eso podría confundir a alguien (como yo, que acaba de regresar por esta respuesta)
FlipMcF
Editado: claridad y respuesta a la pregunta 3 de 'diferencia de horquilla'
FlipMcF