¿Cómo detectar las diferencias entre el repository local y el repository remoto en git?

Digamos que hice un clon de git desde una url para un repository. Hice algunos cambios en un file, se cometió un git.

Cuando hago un git pull, veo que dice "Ya está actualizado"

¿No debería mostrar algo que diga que no estoy actualizado?

Mi pregunta es:

  1. digamos que hice el cambio anterior a mi repository local, pero no me comprometo durante 2 días, pero antes de que hayan transcurrido los 2 días, alguien más hizo un cambio en el repository remoto. ¿Qué pasos debo hacer para asegurarme de que no estoy anulando los cambios en el repository remoto o al less ser capaz de extraer los últimos cambios antes de comprometerme?

  2. ¿Hay alguna forma de diferenciar entre mi repository local y el repository remoto para verificar las diferencias? (en caso de que solo quiera recordar lo que tenía antes?)

Solutions Collecting From Web of "¿Cómo detectar las diferencias entre el repository local y el repository remoto en git?"

Mi primer consejo es no git pull . Haz una git fetch seguida de una git merge .

Para responder a su pregunta cero: De hecho, usted está actualizado. Tienes todas las confirmaciones que tiene el repository remoto. Por lo tanto, no hay nada más que search o fusionar 1 .

Para responder a tu primera pregunta:

  1. git commit : comprometa los cambios en su propia sucursal, sin relación con lo que sucede en los repositorys remotos.
  2. git fetch origin obtención de git fetch origin : obtenga los contenidos del repository remoto ( origin ), pero manténgalos bajo las twigs de origin/branch . Su propio código no se ve afectado en este punto.
  3. git merge origin/master : fusiona el origin/master que es la twig master del origin repository remoto (que has obtenido en este momento) con tu twig actual.
  4. git push origin : retrotrae el commit y la fusión al repository remoto

Para responder a tu segunda pregunta:

  1. git fetch origin : actualización de las twigs de origin/branch .
  2. git diff origin/master : obtiene la diferencia entre tu twig actual y el origin/master la twig.

1 Suponga que esto es lo que inicialmente parecen las confirmaciones en su repository, en el master twigs:

 A -> B -> C -> D -> E | |\- master | \- origin/master 

Esto es justo después de que clonaste el repository. Ahora dice que ha realizado una nueva confirmación en su master sucursal local:

 A -> B -> C -> D -> E -> F | | | \- master | \- origin/master 

Entonces hay dos cosas para observar aquí.

  1. Suponiendo que no hay actividad de otra persona en el origin remoto, no hay nada nuevo que recuperar. Así que el git fetch origin master te dice que no hay nada nuevo.

  2. Si haces git merge origin/master , de nuevo, no hay nada que fusionar. origin/master es un prefijo de master . En otras palabras, el master ya contiene todas las confirmaciones que tiene el origin/master , por lo que no hay nada nuevo que fusionar.

Si utilizó fetch y merge lugar de pull , podría comprender fácilmente qué parte del doble command ( pull ) es la que da como resultado un comportamiento inesperado (en su opinión).

Por supuesto, después de un git push origin master , obtendrá:

 A -> B -> C -> D -> E -> F | |\- master | \- origin/master 

Cuando tira, extrae el historial del server y automáticamente intenta combinar todo lo que ha cambiado, con cosas que otras personas han cambiado. Si puede hacerlo automáticamente, tendrá éxito y no verá nada, y si falla, se le pedirá que solucione cualquier conflicto. Nunca podrá anular silenciosamente los cambios que otras personas hayan realizado.

Si quieres ver si alguien ha cambiado algo, puedes ejecutar esta git fetch y luego git status . El estado imprimirá qué files tienen cambios localmente, pero también dirá algo así como "Su bifurcación es 2 confirmaciones antes del origen / maestro", lo que significa que tiene 2 confirmaciones que no se han enviado al server. Si alguien más también ha enviado al server, dirá algo así como "tu twig local y el origen / maestro han divergido. Esto significa que tanto tú como otra persona se han comprometido a dominar, y cuando lo hagas intentará fusionarlos , como se describió anteriormente.