¿Cómo descartar confirmaciones locales en Git?


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 cuyo 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?

 185
Author: Daniel C. Sobral, 2010-10-07

6 answers

git reset --hard origin/master

Eliminará todas las confirmaciones que no estén en origin/master donde origin es el nombre del repositorio y master es el nombre de la rama.

 422
Author: mipadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 11:15:45

Como un aparte, aparte de la respuesta de mipadi (que debe funcionar por cierto), usted debe saber que haciendo:

git branch -D master
git checkout master

También hace exactamente lo que quiere sin having to redownload everything (su cita parafraseada). Esto se debe a que su repositorio local contiene una copia del repositorio remoto (y esa copia no es la misma que su directorio local, ni siquiera es la misma que su rama comprobada).

Eliminar una rama es perfectamente seguro y reconstruir esa rama es muy rápido y no implica ninguna red trafico. Recuerde, git es principalmente un repositorio local por diseño. Incluso las ramas 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 tu disco duro todo el tiempo.

Si no tienes más ramas que master, debes:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
 26
Author: slebetman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 13:43:13

Lo que hago es tratar de reiniciar difícil de CABEZA. Esto borrará todas las confirmaciones locales:

git reset --hard HEAD^
 7
Author: giang nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-12 09:54:56

Necesitas ejecutar

git fetch

Para obtener todos los cambios y luego no recibirá el mensaje con "su rama está por delante".

 4
Author: Володимир Пасіка,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-30 02:39:10

He visto casos en los que el control remoto quedó fuera de sincronización y necesitaba ser actualizado. Si un reset --hard o branch -D no funciona, intente

git pull origin
git reset --hard 
 0
Author: Jim Clouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 17:13:33

Tuve que hacer un:

git checkout -b master

Como git dijo que no existe, porque ha sido borrado con el

git -D master
 0
Author: ramp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-05 12:00:51