volver sobrescritos siguientes serán revertir los locales ignorar fusionar error deshacer cambios archivos archivo anterior git revert git-checkout

sobrescritos - ¿Cómo puedo revertir todos los cambios locales en el proyecto administrado por Git al estado anterior?



revertir cambios en un archivo git (12)

Re-clonar

GIT=$(git rev-parse --show-toplevel) cd $GIT/.. rm -rf $GIT git clone ...

  • ✅ Borra los compromisos locales, no empujados
  • ✅ Revierte los cambios realizados en archivos rastreados
  • ✅ Restaura los archivos rastreados que eliminó
  • ✅ Borra los archivos / .gitignore listados en .gitignore (como los archivos de compilación)
  • ✅ Borra los archivos / direcciones que no son rastreados y no están en .gitignore
  • 😀 No olvidarás este enfoque.
  • 😔 Desperdicio de ancho de banda

A continuación hay otros comandos que olvido diariamente.

Limpiar y reiniciar

git clean -f -d -x git reset --hard

  • ❌ Borra los compromisos locales, no empujados
  • ✅ Revierte los cambios realizados en archivos rastreados
  • ✅ Restaura los archivos rastreados que eliminó
  • ✅ Borra los archivos / .gitignore listados en .gitignore (como los archivos de compilación)
  • ✅ Borra los archivos / direcciones que no son rastreados y no están en .gitignore

Limpiar

git clean -f -d -x

  • ❌ Borra los compromisos locales, no empujados
  • ❌ Revierte los cambios realizados en archivos rastreados
  • ❌ Restaura los archivos rastreados que eliminó
  • ✅ Borra los archivos / .gitignore listados en .gitignore (como los archivos de compilación)
  • ✅ Borra los archivos / direcciones que no son rastreados y no están en .gitignore

Reiniciar

git reset --hard

  • ❌ Borra los compromisos locales, no empujados
  • ✅ Revierte los cambios realizados en archivos rastreados
  • ✅ Restaura los archivos rastreados que eliminó
  • ❌ Borra los archivos / .gitignore listados en .gitignore (como los archivos de compilación)
  • ❌ Borra los archivos / direcciones que no son rastreados y no están en .gitignore

Notas

Caso de prueba para confirmar todo lo anterior (use bash o sh):

mkdir project cd project git init echo ''*.built'' > .gitignore echo ''CODE'' > a.sourceCode mkdir b echo ''CODE'' > b/b.sourceCode cp -r b c git add . git commit -m ''Initial checkin'' echo ''NEW FEATURE'' >> a.sourceCode cp a.sourceCode a.built rm -rf c echo ''CODE'' > ''d.sourceCode''

Ver también

  • git revert para hacer nuevas confirmaciones que deshacer confirmaciones previas
  • git checkout para retroceder en el tiempo a confirmaciones previas (puede requerir ejecutar primero los comandos anteriores)
  • git stash igual que git reset arriba, pero puedes deshacerlo

Tengo un proyecto en el que ejecuté git init . Después de varias confirmaciones, hice el git status que me dijo que todo estaba actualizado y que no había cambios locales.

Luego hice varios cambios consecutivos y me di cuenta de que quería deshacerme de todo y volver a mi estado original. ¿Este comando lo hará por mí?

git reset --hard HEAD


Busqué un problema similar,

Quería tirar los compromisos locales:

  1. clonado el repositorio (clon git)
  2. cambiado a la rama dev (git checkout dev)
  3. hizo pocos commit (git commit -m "commit 1")
  4. pero decidió deshacerse de estos compromisos locales para volver a remoto (origen / dev)

Así hizo el siguiente:

git reset --hard origin/dev

Comprobar:

git status On branch dev Your branch is up-to-date with ''origin/dev''. nothing to commit, working tree clean

ahora se pierden las confirmaciones locales, volviendo al estado clonado inicial, punto 1 anterior.


Después de leer un montón de respuestas y probarlas, he encontrado varios casos de borde que significan que a veces no limpian completamente la copia de trabajo.

Aquí está mi script de bash actual para hacerlo, que funciona todo el tiempo.

#!/bin/sh git reset --hard git clean -f -d git checkout -- HEAD

Ejecutar desde el directorio raíz de la copia de trabajo.


Es posible que no necesariamente desee / necesite guardar su trabajo / archivos en su directorio de trabajo, sino simplemente deshacerse de ellos por completo. El comando git clean hará esto por ti.

Algunos casos de uso comunes para hacer esto serían eliminar el cruft generado por fusiones o herramientas externas o eliminar otros archivos para que pueda ejecutar una compilación limpia.

Tenga en cuenta que querrá ser muy cauteloso con este comando, ya que está diseñado para eliminar archivos de su directorio de trabajo local que NO ESTÁN SEGUIDOS. Si de repente cambia de opinión después de ejecutar este comando, no hay vuelta atrás para ver el contenido de los archivos que se eliminaron. Una alternativa más segura es ejecutar.

git stash --all

que eliminará todo, pero guardarlo todo en un escondite. Este alijo puede ser utilizado más tarde.

Sin embargo, si realmente QUIERES eliminar todos los archivos y limpiar tu directorio de trabajo, debes ejecutar

git clean -f -d

Esto eliminará todos los archivos y también los subdirectorios que no tengan ningún elemento como resultado del comando. Una cosa inteligente que hacer antes de ejecutar el comando git clean -f -d es ejecutar

git clean -f -d -n

que le mostrará una vista previa de lo que se eliminará después de ejecutar git clean -f -d

Así que aquí hay un resumen de sus opciones, desde las más agresivas a las menos agresivas.

Opción 1 : eliminar todos los archivos localmente (los más agresivos)

git clean -f -d

Opción 2 : Vista previa del impacto anterior (Vista previa más agresiva)

git clean -f -d -n

Opción 3 : guardar todos los archivos (menos agresivo)

`git stash --all`


Intente esto para revertir todos los cambios no confirmados en la sucursal local

$ git reset --hard HEAD

Pero si ves un error como este:

fatal: Unable to create ''/directory/for/your/project/.git/index.lock'': File exists.

Puede navegar a la carpeta ''.git'' y luego eliminar el archivo index.lock:

$ cd /directory/for/your/project/.git/ $ rm index.lock

Finalmente, ejecute de nuevo el comando:

$ git reset --hard HEAD


Me encontré con un problema similar. La solución es utilizar el git log para buscar qué versión de la confirmación local es diferente de la remota. (Por ejemplo, la versión es 3c74a11530697214cbcc4b7b98bf7a65952a34ec ).

Luego use git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec para revertir el cambio.


Mira en git-reflog. Enumera todos los estados que recuerda (el valor predeterminado es 30 días), y simplemente puede retirar el que desee. Por ejemplo:

$ git init > /dev/null $ touch a $ git add . $ git commit -m"Add file a" > /dev/null $ echo ''foo'' >> a $ git commit -a -m"Append foo to a" > /dev/null $ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null $ git reset --hard HEAD^^ > /dev/null $ cat a foo b c $ git reflog 145c322 HEAD@{0}: HEAD^^: updating HEAD ae7c2b3 HEAD@{1}: commit: Append e to a fdf2c5e HEAD@{2}: commit: Append d to a 145c322 HEAD@{3}: commit: Append c to a 363e22a HEAD@{4}: commit: Append b to a fa26c43 HEAD@{5}: commit: Append foo to a 0a392a5 HEAD@{6}: commit (initial): Add file a $ git reset --hard HEAD@{2} HEAD is now at fdf2c5e Append d to a $ cat a foo b c d


Nota: También es posible que desee ejecutar

git clean -fd

como

git reset --hard

no eliminará los archivos sin seguimiento, mientras que git-clean eliminará cualquier archivo del directorio raíz seguido que no esté bajo el seguimiento de git. ADVERTENCIA - ¡TENGA CUIDADO CON ESTO! Es útil ejecutar primero una ejecución en seco con git-clean, para ver qué se eliminará.

Esto también es especialmente útil cuando aparece el mensaje de error.

~"performing this command will cause an un-tracked file to be overwritten"

Lo que puede ocurrir al hacer varias cosas, una de ellas es actualizar una copia de trabajo cuando tanto usted como su amigo han agregado un nuevo archivo con el mismo nombre, pero primero lo ha puesto en el control de código fuente, y no le importa eliminar su copia sin seguimiento. .

En esta situación, hacer una ejecución en seco también ayudará a mostrarle una lista de archivos que se sobrescribirían.


PELIGRO A CONTINUACIÓN: (lea los comentarios. La ejecución del comando propuesto en mi respuesta puede eliminar más de lo que desea)

para eliminar por completo todos los archivos, incluidos los directorios que tuve que ejecutar

git clean -f -d


Si desea revertir los cambios realizados en su copia de trabajo, haga lo siguiente:

git checkout .

Si desea revertir los cambios realizados en el índice (es decir, que ha agregado), haga esto. ¡Advertencia, esto restablecerá todos tus compromisos sin apilar para dominar! :

git reset

Si desea revertir un cambio que haya cometido, haga lo siguiente:

git revert <commit 1> <commit 2>

Si desea eliminar archivos sin seguimiento (por ejemplo, archivos nuevos, archivos generados):

git clean -f

O directorios sin seguimiento (por ejemplo, directorios nuevos o generados automáticamente):

git clean -fd


Si desea revertir todos los cambios Y estar actualizado con el maestro remoto actual (por ejemplo, encuentra que el HEAD maestro ha avanzado desde que se bifurcó y su empuje está siendo "rechazado") puede usar

git fetch # will fetch the latest changes on the remote git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.


simplemente di

git stash

eliminará todos tus chages locales. y también puedes usar más tarde diciendo

git stash apply