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 fetch
ygit pull
- pull es una combinación de buscar y fusionar.Respuestas:
eliminará todos los commits que no estén en
origin/master
dondeorigin
está el nombre del repositorio ymaster
el nombre de la rama.fuente
origin/master
es una rama que rastrea lamaster
rama delorigin
repositorio remoto.origin/master
es una referencia a lamaster
rama 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 temp
origin/master
está en su máquina local. Esa es su copia local (completa) de la rama remota. La verdadera rama remota esorigin master
.git branch -D master
embargo, 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 --hard
obranch -D
no funciona, intentefuente
reset --hard
funciona en esta situaciónreset --hard
debería funcionar aquí. Sin embargo, simplemente estoy señalando que ocasionalmente no se restablece la rama correctamente ygit pull origin
se volverá a sincronizar el control remoto y permitiráreset --hard
que funcione correctamente.Tuve que hacer un:
como dijo git que no existe, porque se ha borrado con el
fuente