Deseo revertir los cambios realizados por una confirmación particular a un archivo dado solamente.Revertir cambios a un archivo en una confirmación
¿Puedo usar el comando git revert para eso?
¿Alguna otra manera simple de hacerlo?
Deseo revertir los cambios realizados por una confirmación particular a un archivo dado solamente.Revertir cambios a un archivo en una confirmación
¿Puedo usar el comando git revert para eso?
¿Alguna otra manera simple de hacerlo?
La manera más limpia que he visto de esta manera se describe here
git show some_commit_sha1 -- some_file.c | git apply -R
Similar a la respuesta de VonC pero utilizando git show
y git apply
.
Boom! Tu eres el hombre. – yitznewton
Bien hecho. La solución de script es excesiva para esto. ¿Por qué no puede haber solo git revert sha-1 filename? –
Bueno, pero VonCs tampoco está mal. Con ambos hay algo que aprender cada día en git :) – hakre
git revert
es para todos los contenidos de archivos dentro de un commit.
Para un solo archivo, puede script it:
#!/bin/bash
function output_help {
echo "usage: git-revert-single-file <sha1> <file>"
}
sha1=$1
file=$2
if [[ $sha1 ]]; then
git diff $sha1..$sha1^ -- $file | patch -p1
else
output_help
fi
(De los git-shell-scripts utilidades de smtlaissezfaire)
Nota:
otra manera es described here si todavía tiene confirma tu modificación actual.
git checkout -- filename
git checkout
tiene algunas opciones para un archivo, modificando el archivo de la CABEZA, sobrescribiendo su cambio.
Dropped.on.Caprica menciones in the comments:
Usted puede agregar un alias a git para que pueda hacer
git revert-file <hash> <file-loc>
y tienen que ser revertida archivo específico.
Ver this gist.
[alias]
revert-file = !sh /home/some-user/git-file-revert.sh
Solo para agregar a la discusión aquí, puede agregar un alias a git para que pueda hacer 'git revert-file
@ Dropped.on.Caprica buen punto. Lo he incluido en la respuesta para una mayor visibilidad. – VonC
¡Gracias! Actualicé tu publicación un poco para adaptarla al uso correcto, ¡pero por lo demás, lo bueno! –
Me basta con utilizar la opción --no-commit
a git-revert
y luego eliminar los archivos que no desea Revertidas del índice antes de que finalmente lo comete. He aquí un ejemplo que muestra cómo revertir fácilmente sólo los cambios a Foo.c en el segundo más reciente comprometerse:
$ git revert --no-commit HEAD~1
$ git reset HEAD
$ git add foo.c
$ git commit -m "Reverting recent change to foo.c"
$ git reset --hard HEAD
Los primeros git-reset
"unstages" todos los archivos, por lo que podemos entonces volver a agregar sólo el archivo que quiero revertir El git-reset --hard
final elimina los archivos revertidos restantes que no queremos conservar.
Suponiendo que está bien para cambiar la historia cometer, aquí hay un flujo de trabajo para revertir los cambios en un único archivo en una anterior comprometen:
Por ejemplo, que desea revertir los cambios en 1 archivo (badfile.txt
) en comprometerse aaa222
:
aaa333 Good commit
aaa222 Problem commit containing badfile.txt
aaa111 Base commit
Rebase en la base de cometer, corregir el problema comprometerse, & continuar.
1) Comience rebase interactivo:
git rebase -i aaa111
2) Marcar el problema de confirmación para editar en el editor cambiando pick
a e
(para editar):
e aaa222
pick aaa333
3) Revertir los cambios en el archivo incorrecto:
git show -- badfile.txt | git apply -R
4) Agregue los cambios & modificar el commit:
git add badfile.txt
git commit --amend
5) terminar el rebase:
git rebase --continue
Solo quiero señalar que esto supone que puede editar el historial de git. Algunas respuestas anteriores crean un nuevo compromiso que invierte el cambio particular sin editar el historial, que no siempre es posible/permitido. – angularsen
¡Esta solución fue mi elección y funcionó a la perfección! Rebase interactivo puede hacer mucha magia :) ¡Gracias! –
mucho más sencillo:
git reset HEAD^ path/to/file/to/revert
continuación
git commit --amend
y luego
git push -f
el archivo se ha ido y confirma el hash, el mensaje, etc. es lo mismo.
Para completar, ¿necesita un paso 'git checkout - path/to/file/to/revert'? Además, no es cierto que el hash sea el mismo después, ¿verdad? La última oración podría ser mejor así: "El resultado es que la última confirmación se reemplaza por una nueva que solo difiere en que no contiene los cambios en el archivo revertido". – Kevin
Duplicado de http://stackoverflow.com/questions/215718/reset-or-revert-a-specific-file-to-a-specific-revision-using-git/215768 – koppor
Extraño ... por qué el cambio después de todos esos años? – VonC