volver restaurar ignorar deshacer cambios anterior git version-control

restaurar - ignorar cambios git



¿Restablecer o revertir un archivo específico a una revisión específica usando Git? (29)

git-aliases, awk y funciones de shell para el rescate!

git prevision <N> <filename>

donde <N> es el número de revisiones del archivo a deshacer para el archivo <filename> .
Por ejemplo, para verificar la revisión previa inmediata de un solo archivo x/y/zc , ejecute

git prevision -1 x/y/z.c

¿Cómo funciona la previsión git?

Agrega lo siguiente a tu gitconfig

[alias] prevision = "!f() { git checkout `git log --oneline $2 | awk -v commit="$1" ''FNR == -commit+1 {print $1}''` $2;} ;f"

El comando básicamente

  • realiza un git log en el archivo especificado y
  • elige el ID de confirmación adecuado en el historial del archivo y
  • ejecuta una git checkout en el ID de confirmación para el archivo especificado.

Esencialmente, todo lo que uno haría manualmente en esta situación,
envuelto en un hermoso y eficiente git-alias - git-prevision

He realizado algunos cambios en un archivo que se ha confirmado varias veces como parte de un grupo de archivos, pero ahora quiero restablecer / revertir los cambios en él a una versión anterior.

He hecho un git log junto con un git diff para encontrar la revisión que necesito, pero no tengo idea de cómo devolver el archivo a su estado anterior en el pasado.


Aquí está mi camino.

a) En Android Studio, abre el archivo.

b) git -> Mostrar historial, encuentra el compromiso anterior al que quiero volver. Obtener el commit_id (es decir, cometer hash).

c) git checkout commit_id file_path


Así es como funciona el rebase :

git checkout <my branch> git rebase master git checkout master git merge <my branch>

Asume que tienes

---o----o----o----o master /---A----B <my branch>

Los dos primeros comandos ... cometer git checkout git rebase master

... verifique la rama de cambios que desea aplicar a la rama master . El comando rebase toma las confirmaciones de <my branch> (que no se encuentran en el master ) y las vuelve a aplicar al jefe del master . En otras palabras, el padre de la primera confirmación en <my branch> ya no es una confirmación anterior en el historial master , sino el jefe de master actual. Los dos comandos son los mismos que:

git rebase master <my branch>

Podría ser más fácil recordar este comando, ya que tanto las ramas "base" como "modificar" son explícitas.

. El resultado final de la historia es:

---o----o----o----o master /----A''----B'' <my branch>

Los últimos dos comandos ...

git checkout master git merge <my branch>

... haga una combinación de avance rápido para aplicar todos los cambios de <my branch> en el master . Sin este paso, la confirmación de rebase no se agrega al master . El resultado final es:

---o----o----o----o----A''----B'' master, <my branch>

master y <my branch> ambos hacen referencia a B'' . Además, desde este punto es seguro eliminar la referencia <my branch> .

git branch -d <my branch>


Creo que lo he encontrado ... de http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

A veces, solo desea volver y olvidarse de cada cambio después de cierto punto porque todos están equivocados.

Empezar con:

$ git log

que muestra una lista de confirmaciones recientes y sus hashes SHA1.

A continuación, escriba:

$ git reset --hard SHA1_HASH

para restaurar el estado a un compromiso dado y borrar permanentemente todos los compromisos nuevos del registro.


Curiosamente, ''git checkout foo'' no funcionará si la copia de trabajo está en un directorio llamado foo; sin embargo, tanto ''git checkout HEAD foo'' como ''git checkout ./foo'':

$ pwd /Users/aaron/Documents/work/foo $ git checkout foo D foo Already on "foo" $ git checkout ./foo $ git checkout HEAD foo


En el caso de que desee revertir un archivo a una confirmación anterior (y el archivo que desea revertir ya confirmado) puede usar

git checkout HEAD^1 path/to/file

o

git checkout HEAD~1 path/to/file

Entonces simplemente ponga en escena y cometa la "nueva" versión.

Con el conocimiento de que un compromiso puede tener dos padres en el caso de una fusión, debe saber que HEAD ^ 1 es el primer padre y HEAD ~ 1 es el segundo padre.

Cualquiera de los dos funcionará si solo hay un padre en el árbol.


Esto funcionó para mí:

git checkout <commit hash> file

Luego cometa el cambio:

git commit -a


Muchas respuestas aquí afirman usar git reset ... <file> o git checkout ... <file> pero al hacerlo, perderá todas las modificaciones en <file> confirmadas después de la confirmación que desea revertir.

Si desea revertir los cambios de una confirmación en un solo archivo, de la misma manera que git revert haría pero solo para un archivo (o diga un subconjunto de los archivos de confirmación), sugiero que use git diff y git apply esa manera ( con <sha> = el hash de la confirmación que desea revertir):

git diff <sha>^ <sha> path/to/file.ext | git apply -R

Básicamente, primero generará un parche correspondiente a los cambios que desea revertir, y luego aplicará el parche en reversa para eliminar esos cambios.

Por supuesto, no funcionará si las líneas revertidas han sido modificadas por cualquier confirmación entre <sha1> y HEAD (conflicto).


Muchas sugerencias aquí, la mayoría en la línea de git checkout $revision -- $file . Un par de alternativas oscuras:

git show $revision:$file > $file

Y también, lo uso mucho solo para ver una versión particular temporalmente:

git show $revision:$file

o

git show $revision:$file | vim -R -

(OBS: $file debe tener el prefijo ./ si es una ruta relativa para git show $revision:$file para que funcione)

Y lo más raro aún:

git archive $revision $file | tar -x0 > $file


Obviamente, alguien necesita escribir un libro inteligible sobre git, o git debe explicarse mejor en la documentación. Ante este mismo problema adiviné que

cd <working copy> git revert master

Desharía la última confirmación que parece hacer.

Ian


Para ir a una versión de confirmación anterior del archivo, obtenga el número de confirmación, digamos eb917a1 y luego

git checkout eb917a1 YourFileName

Si solo necesitas volver a la última versión comprometida.

git reset HEAD YourFileName git checkout YourFileName

Esto simplemente lo llevará al último estado confirmado del archivo.


Para mí, ninguna de las respuestas me pareció muy clara y, por lo tanto, me gustaría agregar la mía, que parece muy fácil.

Tengo una confirmación abc1 y después de eso he hecho varias (o una modificación) a un archivo file.txt .

Ahora diga que he estropeado algo en el archivo file.txt y quiero volver a un commit anterior abc1 .

1. git checkout file.txt : esto eliminará los cambios locales, si no los necesita

2. git checkout abc1 file.txt : esto llevará su archivo a su versión deseada

3. git commit -m "Restored file.txt to version abc1" : esto confirmará su reversión.

  1. git push : esto empujará todo en el repositorio remoto

Entre los pasos 2 y 3, por supuesto, puedes hacer el git status para entender lo que está sucediendo. Por lo general, debería ver el file.txt ya agregado y es por eso que no hay necesidad de git add un git add .


Primer cabezal de reinicio para archivo de destino

git reset HEAD path_to_file

Segundo checkout ese archivo

git checkout -- path_to_file


Puede revisar rápidamente los cambios realizados en un archivo con el comando diff:

git diff <commit hash> <filename>

Luego, para revertir un archivo específico para ese compromiso, use el comando de reinicio:

git reset <commit hash> <filename>

Es posible que deba usar la opción --hard si tiene modificaciones locales.

Un buen flujo de trabajo para administrar puntos de ruta es usar etiquetas para marcar puntos de manera limpia en su línea de tiempo. No entiendo muy bien tu última oración, pero lo que podrías querer es divergir una rama de un punto anterior en el tiempo. Para hacer esto, use el práctico comando de pago:

git checkout <commit hash> git checkout -b <new branch name>

Luego, puede volver a utilizarlo en su línea principal cuando esté listo para combinar esos cambios:

git checkout <my branch> git rebase master git checkout master git merge <my branch>


Puede usar cualquier referencia para un git commit, incluido el SHA-1 si es más conveniente. El punto es que el comando se ve así:

git checkout [commit-ref] -- [filename]


Si confirma un archivo incorrecto en sus últimas confirmaciones, siga las instrucciones:

  1. árbol de código abierto, cambiar a este commit

  1. cambia las líneas y encuentra tu confirmación de que el archivo incorrecto se envió como confirmación

  1. Puedes ver la lista de tus cambios en ese compromiso.
  2. selecciónelo y luego haga clic en ... botones del lado derecho ... haga clic en archivo inverso
  3. luego, puede verlo en la pestaña de estado del archivo en la parte inferior izquierda y luego hacer clic en unstage:

  1. abra su código de estudio visual y vuelva a cometer los archivos eliminados
  2. Después de todos ellos, puede ver los resultados de su último compromiso en el árbol de origen.


Si está utilizando Git Extensions y solo desea volver a la confirmación primaria para el archivo, puede seleccionar la confirmación que contiene los cambios que desea revertir, luego seleccionar la pestaña ''Dif.'' En el panel de detalles, haga clic derecho el archivo que desea revertir, luego ''Restablecer archivo (s) a'' ...., luego ''A'' (el padre)


Si sabe cuántas confirmaciones necesita para volver, puede usar:

git checkout master~5 image.png

Esto supone que estás en la rama master y que la versión que quieres es de 5 confirmaciones.


Sin embargo, git checkout ./foo que git checkout ./foo y git checkout HEAD ./foo no son exactamente lo mismo; caso en punto:

$ echo A > foo $ git add foo $ git commit -m ''A'' foo Created commit a1f085f: A 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 foo $ echo B >> foo $ git add foo $ echo C >> foo $ cat foo A B C $ git checkout ./foo $ cat foo A B $ git checkout HEAD ./foo $ cat foo A

(El segundo add etapas al archivo en el índice, pero no se confirma).

Git checkout ./foo significa revertir la ruta ./foo desde el índice ; agregar HEAD indica a Git que revierta esa ruta en el índice a su revisión HEAD antes de hacerlo.


Suponiendo que el hash de la confirmación que desea es c5f567 :

git checkout c5f567 -- file1/to/restore file2/to/restore

La página de manual de git checkout da más información.

Si desea volver a la confirmación antes de c5f567 , agregue ~1 (funciona con cualquier número):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

Como nota al margen, siempre me he sentido incómodo con este comando porque se usa para cosas comunes (cambiar entre ramas) y cosas inusuales y destructivas (descartar cambios en el directorio de trabajo).


Tengo que conectar EasyGit aquí, que es una envoltura para hacer que git sea más accesible para los principiantes sin confundir a los usuarios experimentados. Una de las cosas que hace es dar más significados para git revert . En este caso, simplemente dirías:

eg revert foo/bar foo/baz


Tienes que tener cuidado cuando dices "rollback". Si solía tener una versión de un archivo en commit $ A, y luego hizo dos cambios en dos commit $ B y $ C separados (entonces lo que está viendo es la tercera iteración del archivo), y si dice " Quiero volver al primero ", ¿en serio lo dices?

Si desea deshacerse de los cambios tanto en la segunda como en la tercera iteración, es muy simple:

$ git checkout $A file

Y luego se compromete el resultado. El comando pregunta "Quiero revisar el archivo del estado registrado por el commit $ A".

Por otra parte, lo que quiso decir es deshacerse del cambio de la segunda iteración (es decir, comprometer $ B), mientras mantiene el compromiso que $ C hizo en el archivo, usted querría revertir $ B

$ git revert $B

Tenga en cuenta que quien haya creado el commit $ B puede no haber sido muy disciplinado y puede haber cometido un cambio no relacionado en el mismo commit, y esta reversión puede tocar otros archivos además de los que usted ve que ofenden cambios, por lo que puede querer verificar el resultado cuidadosamente después de hacerlo. asi que.


Tuve el mismo problema en este momento y encontré que esta respuesta es más fácil de entender ( commit-ref es el valor SHA del cambio en el registro al que desea volver):

git checkout [commit-ref] [filename]

Esto colocará esa versión antigua en su directorio de trabajo y desde allí puede confirmarla si lo desea.


Use git log para obtener la clave hash para una versión específica y luego use git checkout <hashkey>

Nota: No te olvides de escribir el hash antes del último. El último hash apunta a su posición actual (HEAD) y no cambia nada.


Y para volver a la última versión confirmada, que se necesita con más frecuencia, puede usar este comando más simple.

git checkout HEAD file/to/restore


git checkout ref | commitHash - filePath

p.ej

git checkout HEAD~5 -- foo.bar or git checkout 048ee28 -- foo.bar


Puede hacerlo en 4 pasos:

  1. revertir la confirmación completa con el archivo que desea revertir específicamente: creará una nueva confirmación en su rama
  2. reinicio por software que confirma: elimina la confirmación y mueve los cambios al área de trabajo
  3. Escoge los archivos para revertir y cometerlos.
  4. levantar todos los archivos en su área de trabajo

Lo que necesitas para escribir en tu terminal :

  1. git revert <commit_hash>
  2. git reset HEAD~1
  3. git add <file_i_want_to_revert> && git commit -m ''reverting file''
  4. git checkout .

buena suerte


git checkout -- foo

Eso restablecerá foo a HEAD. Tú también puedes:

git checkout HEAD^ foo

para una revisión atrás, etc.


git revert <hash>

Revertirá un commit dado. Parece que piensas que git revert solo afecta al commit más reciente.

Eso no resuelve su problema, si desea revertir un cambio en un archivo específico y ese compromiso cambió más que ese archivo.