Deshaciendo un git pull y sus efectos en la historia.

Aquí está mi triste historia

Hoy cometí el error de pasar de un Repositorio diferente al mío. Estoy trabajando en el Repositorio A y llevé el contenido del Repositorio B a A. Lo hice porque quería algunos files de ese Repositorio.

Después de eso, empujé mi repository a remoto.

Mi problema no es mi código porque ambos repositorys son diferentes. Pero el problema es la historia.

Ahora mi Repositorio remoto que puede ser visto por el público tiene todo el historial de confirmaciones del Repositorio B mezclado con mis confirmaciones en el logging.

¿Cómo puedo eliminar esas confirmaciones del historial de LOG?

¿Hay alguna manera de restablecer un poco mi repository a su estado como ayer? ¿Eso provocaría que desaparecieran las confirmaciones del Repositorio B de mi historia?

Intenté restablecer Merge, Use Re-base y Cherry-pick pero el historial no se eliminó en ninguno de los casos.

Gracias por tu time

Si sabe dónde estaban todas sus sucursales ayer, puede revisarlas y restablecerlas en sus posiciones originales. Para cada twig relevante:

git checkout <branch name> git reset --hard <old hash> git push -f <repository A> <branch name> 

A continuación, puede eliminar las nuevas twigs que no desee. Para cada una de esas twigs:

 git branch -D <branch name> git push <repository A> :<branch name> 

Sin embargo, todo esto es extremadamente incompleto si otras personas pudieran haber sacado del Depósito A mientras tanto. La solución puede ser tanto social como técnica: otras personas que están usando el repository pueden necesitar que les cuenten lo que está pasando para que puedan reparar sus clones locales.

git reflog es donde quieres mirar. Siempre y cuando no haya recogido basura por un time, debería poder hacer un git reset --hard HEAD@{x} siendo x el punto específico de la historia en el que desea restablecer todo en su twig local de nuevo a .

Tan pronto como lo hagas, haré un git push --force para devolver tu repo público a donde lo desees …

Esto tiene los problemas desafortunados que si alguien más ya ha sacado de su control remoto, su historia estará en mal estado.

Gracias a todos. He resuelto mi problema Logré resolverlo con reference a diferentes artículos y preguntas.

Explicaré la respuesta aquí junto con las cosas que aprendí a través de mi lucha.

Para empezar, para eliminar selectivamente las confirmaciones de la historia que se encuentran distribuidas de la mejor manera, se pueden encontrar en la respuesta a esta pregunta :

Específicamente la respuesta de Charles Bailey . Lo más cercano a esta respuesta fue Stuart .

Nota: Revertir un commit no lo elimina del historial, Reset lo hace.

En cuanto a mi situación particular, pensé que debía seguir el método anterior para cada compromiso que no quisiera, pero en realidad la respuesta era más simple.

En mi situación, tuve que restablecer git a la confirmación justo antes de sacar el Repositorio B y tiene que hacerse para todas las twigs. Una vez hecho esto, todas las confirmaciones no deseadas de B desaparecieron de mi historial.

Otra cosa interesante de mencionar es que usar git Cherry-Pick o Revert en muchos commits no es tan sencillo como suena en los artículos en línea, less para mí.

Gracias a todos.