¿Cómo descartar todos los cambios realizados en una rama?


116

Estoy trabajando en una rama (es decir design) y he realizado una serie de cambios, pero necesito descartarlos todos y restablecerlo para que coincida con la versión del repositorio. Pensé que git checkout designlo haría, pero solo me dice que ya estoy en la rama designy que tengo 3 archivos modificados.

¿Cómo descartaría esos cambios y obtendría la rama tal como está ahora en el servidor remoto?

Respuestas:


207

Nota: NO PUEDE DESHACER esto.

Intente git checkout -festo descartará cualquier cambio local que no esté comprometido en TODAS las ramas y master.


86

git reset --hard puede ayudarte si quieres deshacerte de todo desde tu última confirmación


6
ogit reset --hard HEAD^
pez muerto

28
git reset --hard HEAD^realmente debería ser la respuesta aceptada. OP no preguntaba por otras ramas ...
vphilipnyc

2
Intenté esto y creo que borró todo desde mi último empujón, no solo mi último compromiso.
Chase Roberts

3
Intenté git reset --hard HEAD ^ y todavía dejaba un montón de archivos sin seguimiento. Ahora busque en Google cómo eliminarlos con un simple comando.
John Deighan

20
git diff master > branch.diff
git apply --reverse branch.diff

Estos pasos pueden ser muy útiles si su objetivo es establecer el estado de una rama específica para que sea igual a la rama maestra. Para hacerlo, ejecute esto desde dentro de la rama específica, y luego elimine el archivo [nombre de rama] .diff cuando git rm [branch name].diff
termine de

18

Si no desea ningún cambio designy definitivamente desea que coincida con la rama de un control remoto, también puede eliminar la rama y volver a crearla:

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
también: diseño de git checkout; git reset --hard origen / diseño
Dan

También me comprometería antes de eliminar la rama
Asarluhi

Si tiene confirmaciones en la sucursal local que no están en el control remoto, esta es una receta para meterse en situaciones realmente confusas en mi opinión. Definitivamente no usaría esta solución.
Erewok el

1
@erewok: Bueno, la pregunta dice específicamente que el autor de la pregunta quiere descartar todos los cambios.
mipadi

Y no creo que esta respuesta logre eso.
erewok

7

@Will, git immersion es un tutorial de git realmente agradable y simple. le mostrará cómo deshacer los cambios para los siguientes casos: no preparado, preparado y confirmado. laboratorios 14-18


2
Solo me gustaría decir que ya hice git immersion ... más de un año después. ¡OI! Debería haber hecho esto mucho antes ...
Will

1
Esto debe Rubyinstalarse ... lo que no siempre parece una opción
Vishnu

5

Cuando desee descartar cambios en su rama local, puede ocultar estos cambios usando el comando git stash.

git stash guardar "some_name"

Sus cambios se guardarán y podrá recuperarlos más tarde, si lo desea, o puede eliminarlos. Después de hacer esto, su rama no tendrá ningún código sin confirmar y puede extraer el último código de su rama principal usando git pull.


4

En la raíz de origen: git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes


0

Método REVERSIBLE para descartar todos los cambios:

He encontrado esta pregunta después de después de hacer una fusión y olvidar a la caja de desarrollar inmediatamente después. Lo adivinó: comencé a modificar algunos archivos directamente en el maestro . ¡Oh! Como mi situación no es única (todos lo hemos hecho, ¿no? ->), ofreceré una forma reversible que solía descartar todos los cambios para que el maestro parezca desarrollarse nuevamente.

Después de hacer una git diffpara ver qué archivos se modificaron y evaluar el alcance de mi error, ejecuté:

git stash
git stash clear

Después de guardar primero todos los cambios, luego se borraron. Todos los cambios realizados en los archivos por error en el maestro desaparecieron y se restauró la paridad.

Digamos que ahora quería restaurar esos cambios. Puedo hacer esto. El primer paso es encontrar el hash del alijo que acabo de borrar / soltar:

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

Después de aprender el hash, restauré con éxito los cambios no confirmados con:

git stash apply hash-of-cleared-stash

Realmente no quería restaurar esos cambios, solo quería validar que podía recuperarlos, así que los borré de nuevo.

Otra opción es aplicar el alijo a una rama diferente , en lugar de borrar los cambios. Entonces, en términos de eliminar los cambios realizados al trabajar en la rama incorrecta, stashle brinda mucha flexibilidad para recuperarse de su boo-boo.

De todos modos, si desea un medio reversible de borrar los cambios en una sucursal, lo anterior es una forma menos peligrosa en este caso de uso.


-1

git checkout -f

Esto es suficiente para tu pregunta. Lo único que es, una vez hecho, está hecho. No hay deshacer.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.