Había estado trabajando en algo y decidí que estaba completamente jodido ... después de haber cometido algo. Así que probé la siguiente secuencia:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
En ese momento recibí el mensaje
Your branch is ahead of 'origin/master' by 2 commits.
Quiero descartar mis confirmaciones locales , sin tener que borrar mi directorio local y volver a descargar todo. ¿Cómo puedo lograr eso?

git fetchygit pull- pull es una combinación de buscar y fusionar.Respuestas:
eliminará todos los commits que no estén en
origin/masterdondeoriginestá el nombre del repositorio ymasterel nombre de la rama.fuente
origin/masteres una rama que rastrea lamasterrama deloriginrepositorio remoto.origin/masteres una referencia a lamasterrama del control remoto llamadoorigin.Como comentario aparte, aparte de la respuesta de mipadi (que debería funcionar por cierto), debes saber que al hacer:
también hace exactamente lo que quieres sin
having to redownload everything(tu cita parafraseada). Esto se debe a que su repositorio local contiene una copia del repositorio remoto (y esa copia no es lo mismo que su directorio local, ni siquiera es lo mismo que su rama desprotegida).Eliminar una sucursal es perfectamente seguro y reconstruir esa sucursal es muy rápido y no implica tráfico de red. Recuerde, git es principalmente un repositorio local por diseño. Incluso las sucursales remotas tienen una copia en el local. Solo hay un poco de metadatos que le dicen a git que una copia local específica es en realidad una rama remota. En git, todos los archivos están en su disco duro todo el tiempo.
Si no tiene ninguna otra rama que no sea master, debe:
fuente
Cannot delete the branch 'master' which you are currently on.git checkout -b temp;git branch -D master;git checkout master;git branch -D temporigin/masterestá en su máquina local. Esa es su copia local (completa) de la rama remota. La verdadera rama remota esorigin master.git branch -D masterembargo, tal vez no fue necesario, ya que, como se señaló, genera un error.Lo que hago es intentar restablecer duro a HEAD. Esto eliminará todos los commits locales:
fuente
^representa la confirmación principal, por lo que restablecer aHEAD^descarta los cambios no confirmados y mueve la rama a la confirmación anterior, "eliminando" efectivamente la confirmación más reciente (aunque la confirmación aún existe, la rama simplemente no lo señala). La respuesta tendrá solo una confirmación local y el resto son cambios no confirmados. @karim @giangNecesitas correr
Para obtener todos los cambios y luego no recibirá un mensaje con "su sucursal está por delante".
fuente
He visto casos en los que el control remoto no estaba sincronizado y necesitaba ser actualizado. Si a
reset --hardobranch -Dno funciona, intentefuente
reset --hardfunciona en esta situaciónreset --harddebería funcionar aquí. Sin embargo, simplemente estoy señalando que ocasionalmente no se restablece la rama correctamente ygit pull originse volverá a sincronizar el control remoto y permitiráreset --hardque funcione correctamente.Tuve que hacer un:
como dijo git que no existe, porque se ha borrado con el
fuente