2009-05-23 14 views
59

Recientemente he enviado un archivo al HEAD de mi sucursal que tiene errores en él. Necesito hacer las siguientes cosas:Git: revisar un archivo de una confirmación anterior y enmendarlo en HEAD

  • conseguir ese archivo de un cometen anterior a la cabeza

  • cometer ese archivo de nuevo en la cabeza

Cuál es la mejor manera de ir sobre eso?

+1

Lo más fácil sería copiar la archive el contenido de esa confirmación particular usando un cliente ui (o desde github bitbucket, etc.) y péguelo en su archivo actual y confirme :) Más fácil que escribir el hash y la ruta – nawfal

Respuesta

91

te han prácticamente mismo lo ha dicho:

En primer lugar obtener el archivo de nuevo desde un commit antes:

$> git checkout HEAD~1 path/to/file.ext 

luego confirmar que:

$> git commit -a -m 'Retrieved file from older revision' 

Si sólo los cambios que se presentar cuando está presente en la última confirmación, incluso se puede utilizar git-revert:

$> git revert HEAD 

Creo que sería mejor hacer una confirmación por separado, porque te dice exactamente lo que has revertido y por qué. Sin embargo, puede aplastar esto en la confirmación anterior utilizando el interruptor --amend al git-commit.

+0

--mendar sería un cambio para la confirmación de git, no para agregar git – bdonlan

+0

Vaya, tienes razón. Fijo. – sykora

+0

git-revert * haría * una confirmación por separado (no estaba del todo claro en su descripción). El uso de "git commit --amend" corregiría el último commit, en lugar de crear un nuevo en (pero no puedes hacer esto si publicaste esta parte de la historia) –

0

Atención, en este escenario:

Commit hash - File modified 
aaaaaaa  index.php 
bbbbbbb  test.php 
ccccccc  index.php 

git checkout CABEZA ~ 1 (o la cabeza ^) index.php tratar de pago y envío el archivo index.php a anterior hash de cabeza (bbbbbbb), pero esto no es el archivo hash de confirmación anterior real es ccccccc. En el hash anterior de HEAD, index.php aún no se modificó porque el último cambio se realizó en hash ccccccc.

Para revertir algún archivo de confirmación anterior hash que afectó el archivo, utilice:

git log -n 2 --pretty=format:%h path/to/file.ext 

Ignorar primera hash y tomar la segunda almohadilla, entonces:

git checkout <second_hash> path/to/file.ext 
git commit -m 'Revert this file to real previous commit' 
Cuestiones relacionadas