Git avanza rápido reemplaza repo completo eliminando historial anterior

Hay un repository en github llamado A. Cloné este informe a mi local de github. El repository original A tiene una twig llamada 'a', que está en una versión anterior de A. Hubo una confirmación del propietario del repository que eliminó el historial y reemplazó todos los files en el repository. En github si compones los dos, dice, A and a are entirely different commit histories

Mi problema es que quiero presionar una confirmación en una que está sincronizada, como una copy de security antes de que el propietario reenvíe rápidamente la twig principal. Pero si git pull antes de commit (que es una buena práctica) estoy seguro de tener problemas ya que no está para nada sincronizado.

La mejor solución sería dejar de rastrear lo que hace el maestro y replacelo con una twig que no es posible en cuanto a lo que sé. ¿Qué debo hacer para eliminar la confirmación de avance rápido y hacer que vuelva a sincronizarse con la twig 'a'?

PD: El dueño del repository obtiene ![rejected] master -> master (non-fast-forward) , intenta hacer un jalón. Dice que "la punta de su twig actual está detrás de su contraparte remota"

Si alguna de las partes no está clara, no dude en preguntar, me encuentro con este problema desde 2 días seguidos. Gracias.

(Si tuviera una pregunta oculta en algún lado, seguramente no podría encontrarla. Aquí está mi respuesta basada en adivinar lo que intentó preguntar 🙂

No estoy seguro de por qué piensas que hacer git pull es una buena práctica antes de cometer cosas. Hacer una git fetch seguido por el gitk master origin/master seguro que tiene sentido para tener una idea del estado actual. Entonces generalmente quiere decidir entre git checkout master && git rebase origin/master y git checkout master && git merge origin/master .

Si su sucursal master local está en alguna parte, no debe ser así, primero asegúrese de que no haya cambios no confirmados y luego haga la git checkout master && git reset --hard [sha1-of-the-commit-you-want] para mover el twig master cualquier lugar que desee. Si luego desea sobrescribir la twig maestra en el origin con su nuevo estado correcto, simplemente haga git push -f origin master . Tenga en count que si otras personas han comprobado el antiguo master desde el origin , tendrá que volver a calcular todas sus confirmaciones para seguir a su nuevo master . Consulte https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_recovering_from_upstream_rebase para get más información.

Lo resolví con una solución simple. 1. Los cambios locales se cometieron con
git commit -a -m 'temp' .
2. Hice una nueva sucursal con todos esos cambios reflejados en mi máquina local.
3. Hizo un pago en la twig principal.
git checkout master
4. Hizo una fuerza empujar después de cometer en mi repository original.
git push -f upstream master
Ahora mi repository local y original están completamente sincronizados. PD: hay muchas advertencias sobre el impulso de la fuerza, ya que cambia la historia. Entonces úselo con mucho cuidado.