Git se fusionó sin que yo preguntara? ¿Por qué?

Estaba trabajando en master, terminé lo que tenía que hacer, y luego hice

git commit -am "message". 

Quería probar la escritura de una nueva característica, así que lo hice:

 git branch NewFeature 

seguido por

 git checkout NewFeature 

Luego hice cambios a los files controlados por la versión, volví a Git e hice

 git checkout master 

Lo que olvidé hacer fue confirmar esos cambios en la twig NewFeature. Mi culpa, sí, pero mirando alnetworkingedor de SO, parece que debería haber fallado sin la bandera -f. Lamentablemente, solo fusionó mis cambios con el maestro. Naturalmente, me asusté y lo hice

 git reset --hard head 

¡Parece que perdí todo el trabajo que había hecho en la sucursal de NewFeature cuando volví a cambiar! ¿Qué hice mal?

Este es un comportamiento normal.

Si no tiene cambios conflictivos entre sucursales, git simplemente "mueve" los cambios cuando finaliza la compra. Git debería mostrarle un resumen de los files movidos después del pago.

Haciendo git reset --hard HEAD habrá revertido tus cambios.

Más información

Si tiene cambios no confirmados pero desea trabajar en otras cosas en una twig diferente, puede ocultar sus cambios para más adelante. Ver documentos ocultos .

  • git stash
  • git checkout <branch>
  • Haga sus cambios y comprométase
  • git checkout <oldBranch>
  • git stash pop para desatascar

Es posible que desee considerar consultar "git reflog" para conocer el estado de las sucursales y restaurar sus cambios.

Pero como notó, git reset --hard es una operación que cambia el tree de trabajo, como se indica en la página man:

  --hard Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded. 

Escribí más sobre el reflog en mi serie semanal de Sugerencias de la semana aquí:

http://alblue.bandlem.com/2011/05/git-tip-of-week-reflogs.html