Crear una twig de git y revertir el original al estado de subida

Hace poco eché a perder mi repository git y me gustaría saber si hay algún remedio para ello.

Mi configuration es esta:

Central repo on github. Personal repo on github (which is a fork of Central) +Central is setup as remote (upstream/master) +Master branch (origin/master) +Feature branch (origin/feature) 

Mi flujo de trabajo fue así:

 Need to fix something in Central: 1. checkout Master 2. Make changes 3. Pull from upstream/master and merge 3. Commit, push to upstream/master Need to work on a New Feature: 1. Checkout/Create Feature branch 2. Work work work 3. Pull from upstream/master and merge 4. Commit, push to upstream/master 

De esta manera, siempre tuve un estado prístino de Central en mi twig de Maestro.

Ahora lo que hice fue empezar a trabajar en la twig Master en su lugar. Así que hice cambios en mi maestro y ya no puedo ramificarme de él para get una copy de Central. Cada vez que tengo que hacer y enviar algunas correcciones a Central, tengo que clonar Central en otro directory y trabajar desde allí.

Mi pregunta: ¿Hay alguna manera de "revertir" que mi maestro sea una copy idéntica de la Central, mientras muevo todos los cambios que he hecho en mi Maestro a otra twig (digamos Función)?

Sé que es confuso y agradecería cualquier ayuda. Aclararé si algo no está claro.

Bueno, la solución fue bastante simple, insinuada por Pat Notz y Bombe.

 #Make sure we're on the master branch $ git checkout master # Make a new branch to hold the work I've done $ git branch old_master # Save this branch on my remote repo (for backup) $ git checkout old_master $ git push origin old_master # Reset my local master back to match the commit just before I started # working on my new feature $ git checkout master $ git reset --hard 2aa93842342342 # Get it to be the same as my Central $ git pull upstream master # Now DELETE my master on my remote repo $ git push origin :master # And recreate it $ git push origin master # Branch created! #* [new branch] master -> master # 

Ahora tengo dos twigs bonitas: maestro y antiguo maestro. ¡Con master es una copy de mi Central, para reparaciones de producción, y old_master mantiene todo el trabajo que hice anteriormente!

¡Gracias!

 # Make sure we're on the master branch $ git checkout master # Make a new branch to hold the work I've done $ git branch old_master # Reset my local master back to match origin/master $ git reset --hard origin/master 

Ahora puedes pagar old_master y usarlo como lo hiciste con tu twig de feature

¿A qué te refieres exactamente por

Enfadeé a mi maestro y ya no puedo ramificarme de él.

Siempre puede crear una nueva bifurcación a partir de cualquier confirmación en su repository, sin importar cuán "desorderada" pueda ser, que por cierto es algo de lo que Git no tiene ni idea.

Básicamente, puede revertir su repository a cualquier estado que tenía anteriormente porque Git no eliminará explícitamente ningún object, solo recogerá objects no referencedos (colgando) de vez en cuando. Entonces solo necesitas saber cómo era tu repository. gitk git log gitk o git log puede ayudarte allí.

Después de restaurar su repository local a un estado que le guste, simplemente puede volver a enviarlo a su repository público central. Si eso da como resultado un impulso de avance rápido, es posible que deba especificar el indicador --force al presionar.