La twig de seguimiento remoto de Git se separó de la sucursal local con confirmaciones idénticas con diferentes SHA.

Aquí está el estado actual de mi git repo (como se visualiza en GitX).

Historia de git divergente

Los commits '34e …' y 'c3d …' (los comentados 'Implemented a global …') son IDENTICOS. Confirmé esto con git diff, ¡e incluso tienen times de confirmación idénticos! La única diferencia es sus SHA.

No tengo idea de cómo conseguí mi repo en este estado. Si bien no soy muy profesional, lo he estado usando desde hace un time y me he sentido muy cómodo con todos los conceptos básicos. Esto ocurrió de la nada, y no estaba experimentando con funciones o flujos de trabajo de GIT que no había usado antes, así que estoy bastante confundido.

Nadie más ha comprometido nada con el control remoto, así que puedo cambiar el historial allí, pero una solución que no implique eso sería mejor.

Podría hacer la fusión o rebase normal de maestro y origen / maestro, pero no me siento cómodo con eso, ya que la historia mostrará 2 confirmaciones idénticas.

¿Es posible verificar origen / máster y luego volver a establecer la base de todos los commits comenzando en 'a4a …' en origen / master, y luego cambiar el master a este nuevo HEAD? (básicamente, dejar el commit 'c3d …' colgando solo, lo que no importa ya que es el dupe)

1) Entonces, ¿cuál es la forma preferida de solucionar esto?
2) ¿Alguna idea de cómo sucedió esto? ¿Alguien más lo ha visto antes?

EDITAR:
git diff c3db784817 34e1ab666a : no se emitió nada.

git reflog master :

Bender: mt-d-styles tyson $ git reflog master
9579294 master @ {0}: confirmar: Se agregó una printing de console solo de debugging para probar la visualización de imágenes
1155228 master @ {1}: commit: Se agregó una nueva interfaz de marcador que las celdas personalizadas pueden imp
a4ab788 master @ {2}: commit: se agregó un nuevo StyledRootElement que automáticamente se aplica
c3db784 master @ {3}: commit: se implementó una técnica global para diseñar todos.
34e1ab6 master @ {4}: commit: Implementé una técnica global para diseñar todos.
8519fb1 master @ {5}: commit: extendió el método de eliminación para dar acceso a las personas que llaman a
30aeee6 master @ {6}: commit: Se agregó un nuevo método de fábrica basado en Side Swipe View con

git reflog origin / master :

Bender: mt-d-styles tyson $ git reflog origin / master
34e1ab6 refs / remotes / origin / master @ {0}: actualización por push
8519fb1 refs / remotes / origin / master @ {1}: actualización por push
495e0ef refs / remotes / origin / master @ {2}: actualización por push
c5fec81 refs / remotes / origin / master @ {3}: actualización por push
cba1e0f refs / remotes / origin / master @ {4}: actualización por push
9ee1ffb refs / remotes / origin / master @ {5}: actualización por push
68ee429 refs / remotes / origin / master @ {6}: actualización por push
0e2d199 refs / remotes / origin / master @ {7}: actualización por push
8a4de84 refs / remotes / origin / master @ {8}: actualización por push

EDICION 2:
git log –format = raw –decorate –graph –all :

* commit c3db7848171f396c5a595a35dd6b609c119f9e84 | tree 998e9749546d05178798c8a462d3eff02a111f4c | parent 8519fb17e77b8ae865e071772ae652316df8822a | author Tyson <tyson> 1364529327 +0800 | committer Tyson <tyson> 1364539365 +0800 | | Implemented a global technique for styling all existing MT.D element backg | | * commit 34e1ab666a81dde7582ee9e31bfa961420d38f55 (origin/master) |/ tree 38f9e0c3d936c702fdcd18d215a2f0a88280893b | parent 8519fb17e77b8ae865e071772ae652316df8822a | author Tyson <tyson> 1364529327 +0800 | committer Tyson <tyson> 1364529327 +0800 | | Implemented a global technique for styling all existing MT.D element bac | 

La Causa : Probablemente reescribiste la historia. Si los commits fueran exactamente idénticos, el SHA sería automáticamente el mismo. Lo que ves en tu UI no es la date de compromiso, sino la date del autor. Ejecute git log --format=raw --decorate ̵-graph --all para get más detalles. Supongo que verá que la date de confirmación de su versión local es posterior. Esto se debe a la reescritura del historial, por lo general, a la modificación o al rebase.

La solución : si sabes cómo volver atrás, puedes intentar tirando con rebase; si las confirmaciones son realmente idénticas, git debería darse count de esto y solo agregar una confirmación. Si no sabes cómo regresar, simplemente rebase el master en origin/master , cortando en c3db784817:

 git rebase --onto origin/master c3db784817 master 

@ Tu pregunta en los comentarios:

Cómo sé que enmendó desde el reflog:

 c3db784 master@{3}: commit: Implemented a global technique for styling all exist 34e1ab6 master@{4}: commit: Implemented a global technique for styling all exist 

Tu twig principal estaba en 34e1ab6 , después de que creaste una confirmación. Luego presionaste este commit. Luego, su twig principal se movió a c3db784 , una confirmación con el mismo post, y su cliente de git dice que el motivo fue commit . Como no había movimiento de cabeza de bifurcación en el medio, esto huele mucho como una enmienda. Sin embargo, el cliente de la command-line diría commit (amend) .

Y su logging me dice que hizo el primer commit en el time de Unix 1364529327 (2013-03-28 20:55:27) y luego lo modificó en el time de Unix 1364539365 (2013-03-28 23:42:45). (Y que probablemente vivas en los Estados Unidos;)