2011-03-02 16 views
149

He clonado un repositorio github y no realicé cambios localmente. El repositorio Github avanzó con commits en la misma rama.git diff entre el repositorio remoto clonado y original

  1. ¿Cómo encuentro una diferencia entre mi repositorio local y el repositorio github original?
  2. ¿Cómo encuentro una diferencia entre mi copia de trabajo y el repositorio github original?
  3. ¿Cómo encuentro una diferencia entre mi repositorio local y otro repositorio github del mismo proyecto?
+1

posible duplicado de [comparar git branch local con sucursales remotas?] (Http://stackoverflow.com/questions/1800783/compare-local-git-branch-with-remote-branch) –

Respuesta

146

1) Añadir los repositorios remotos que desea comparar:

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

2) actualizar su copia local de un remoto:

git fetch foobar 

Fetch no va a cambiar su copia de trabajo.

3) Comparación de cualquiera de las ramas de su repositorio local a cualquier control remoto que ha añadido:

git diff master foobar/master 
+0

¿Necesito git fetch before diff? Supongo que no hay forma de diferir sin eso. – Gemseeker

+0

Sí, esto es correcto. He actualizado mi respuesta. – dbyrne

+0

Esto es realmente una respuesta a la pregunta 3 solamente (diff con otro repositorio github). –

40

Otra respuesta a sus preguntas (asumiendo que son el principal y ya lo hice "git fetch origen" para que se repo conscientes de los cambios remotos):

1) se compromete en la rama remota desde cuando se creó rama local:

git diff HEAD...origin/master 

2) que se comprometen con "copia de trabajo" que quiere decir y nuestra sucursal local con algunas confirmaciones locales que aún no están en remoto. Para ver las diferencias de lo que tiene en su filial local, pero que no existe en ejecución de la rama remota:

git diff origin/master...HEAD 

3) Véase la answer por dbyrne.

+0

¡Gracias por la sintaxis 'HEAD..origin/master'! Hemos estado recibiendo errores con Origin/HEAD que no existe, y esto lo resolvió. – Dan

+0

@ruslan: ¿qué significa cuando 'git diff HEAD ... origin/master' no devuelve nada si he clonado un directorio remoto al que estoy autorizado a realizar cambios? –

+0

Ocurrió un error cuando estaba clonando usando la GUI de Windows, por lo tanto, me pregunto si el clon pasó por completo. Veo que las carpetas están aquí en mi directorio, pero quiero asegurarme de que sea lo mismo que remota. Sin embargo, en git shell, git diff no devuelve nada. Estoy confundido si mi clon ha tenido éxito o no? –

17

Este ejemplo podría ayudar a alguien:

Nota "origin" es mi alias de distancia "Lo que está en Github"
Nota "mybranch" es mi alias para mi rama "lo local" que soy sincronizándose con github
--el nombre de su rama es 'maestro' si no creó uno. Sin embargo, estoy usando el nombre diferente mybranch para 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) 

Añadir el "otro repositorio GitHub del mismo código" - a esto lo llamamos un tenedor:

$ 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 es hasta la fecha:

$ git fetch 

Cambio algunas cosas localmente digamos file ./foo/bar.py

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

Revisión 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. 

Commit localmente.

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

Ahora, yo soy diferente de 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) 

Dif esto con mando a distancia - el 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 aplicar estos a control remoto)

¿Cómo funciona mi remot ¿La rama difiere de la rama principal remota?

$ git diff origin/mybranch origin/master 

¿En qué se diferencia mi material local de la rama maestra remota?

$ git diff origin/master 

¿En qué se diferencia mi material de la horquilla de otra persona, rama principal del mismo repositorio?

$git diff mybranch someOtherRepo/master 
+5

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

He leído tal vez 20 publicaciones sobre cómo comparar remota y local. Me acabo de dar cuenta de esto: primero se OBTENGA Git fetch. git es realmente el código de montaje de RCS. Jesús. Gracias por confirmar, Don! –

+0

acaba de agregar 'git fetch' a esta respuesta. – FlipMcF

Cuestiones relacionadas