Deshacer un mal tirón

Antes que nada, Git apesta. Lo sé, lo sé, se supone que es lo mejor desde el pan en rebanadas, pero apesta. Es como intentar afeitarse con una motosierra: un pequeño error y hay sangre y dientes en todas partes. Quizás, si pudiera hacer una distinción exacta entre una cabeza, un ref, un compromiso, una twig, un tallo, un gnargel y un whizpoo, algo de esto podría ser un poco más fácil, pero para un mortal ordinario con solo 10 años experiencia de SVN, Perforce y RCS, todo parece una magia negra bastante irritable.

Ahora, por alguna razón, git pull nunca funcionó para mí. Recibo un post de error de 10 líneas que, hasta ahora, ha sido tan útil como la palabra "error". Buscar en Google el post de error produjo una amplia gama de sugerencias que solo tenían en común el hecho de que no tenían ningún efecto aparente en absoluto. Pero ese no es el problema de hoy: me he acostumbrado a escribir la git pull origin branch .

Hoy, estaba yendo y viniendo entre dos twigs, "master" y "lounge" y en este momento estaba en la twig master. Quería get los últimos cambios del repository remoto al local, pero lo escribí mal. En lugar de escribir git pull origin master , escribí git pull origin lounge y luego, sin pensarlo, escribí el command correcto.

No hay evidencia de la primera (mala) extracción en el logging, solo dos fusiones del maestro:

 commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b Merge: 43fdec5... db09f0d... Author: Malvolio <info@xcompanyx.com> Date: Wed Nov 24 20:38:58 2010 -0500 Merge branch 'master' of github.com:xcompanyx/xRepositoryX commit db09f0d79d744d6a354142041b47ff5d748999f3 Merge: 81b6c3d... fc73e25... Author: Malvolio <info@xcompanyx.com> Date: Wed Nov 24 17:38:16 2010 -0800 Merge branch 'master' of github.com:xcompanyx/xRepositoryX commit 81b6c3d04b7c464f8750a56282635526a5ef83a1 Author: Michael <info@xcompanyx.com> Date: Wed Nov 24 17:38:07 2010 -0800 the last commit I did 

Pero los files recién creados en la twig lounge están ahí en mi repository.

Entonces ahora estoy loco, ¿verdad? ¿Debería encender mi repository, volver a clonar el control remoto, volver a aplicar manualmente todos los cambios no utilizados y apuntarlo a Git chupar o hay algún conjuro que pueda recitar que lo haga todo mejor? ¿Ayudaría si sacrificara una cabra?

Usa git reflog para ver a qué apunta tu HEAD antes de git reflog .

Deberías ver algo como:

 48ab8d HEAD@{0}: pull: Fast-forward a34bda HEAD@{5}: commit: my last commit message 

Ahora, apunte su twig principal hacia atrás en la confirmación antes del mal tirón:

git reset --hard a34bda

Hecho. Como si nunca hubiera sucedido

No puedo entender totalmente su historial a partir de su pregunta, pero en general, si realiza dos fusiones (una extracción es una fusión), es completamente sencillo eliminar una de ellas.

 - o - o - o - A - M1 - M2 (master) / / - o - o - o / (origin/lounge) / - o - o (origin/master) 

La forma más obvia:

  git checkout master git reset --hard A git merge origin/master 

Esto utiliza su versión localmente almacenada en caching del maestro de origen, si desea fusionar lo que hay ahora, use git pull origin master .