2012-02-17 20 views
11

Estoy programando. Agrego el código hermoso y lo comprometo y lo empujo a mi repositorio como:Git: cómo retroceder a la última inserción/confirmación

git add * 
git commit 
//writes message 
git push unfuddle master 

Ahora entro y lo arruino todo. No he emitido un comando git ya que empujo la belleza. ¿Cómo hago que mis archivos locales vuelvan a lo que se cometió?

git pull dice mi repo local es "al día"

git checkout spams mi pantalla y no se parece a cambiar nada.

Para ser claros: no estoy tratando de modificar mi repositorio remoto, solo hago que mi repositorio local se vea como el servidor.

Mi solución actual es eliminar la carpeta y volver a cerrar el repositorio. Eso no puede ser correcto.

Respuesta

13

Puede restablecer a CABEZA: git reset --hard HEAD

+0

'git stash' He encontrado que también hace lo que quiero. – Mikey

+1

seguro, también puede usar su última copia de seguridad del disco duro para llegar allí :) – three

1

¿Usted intentó git checkout -f master?

7

ACTUALIZACIÓN:

La mejor manera de hacer esto es

git stash -u 

¿No

git reset --hard HEAD 

es una operación que no se puede deshacer y que realmente puede bombardear su trabajo a menos está utilizando la máquina del tiempo en una Mac o el nuevo servicio de copia de seguridad en Windows 8. Linux puede tener un esquema así, aunque yo no uso uno.

Si también desea Nuked ficheros ignorados, puede

git clean -xdf 
0

Si no ha cometido nada, sólo tiene que hacer un $ git reset --hard. Si ha cometido algunas cosas, puede hacer un git reset --hard origin/master para volver a la versión que está en el control remoto.

3

git pull dice mi repo local es "al día"

git pull le está diciendo su repositorio es hasta la fecha debido a su repositorio local y su repositorio remoto ambos apuntan a la misma cabeza (la último compromiso). Esto se debe a su git push, que sincronizó el control remoto con su local repositorio.

Git no compara los cambios que no se han confirmado en la rama remota cuando decide qué extraer; por lo tanto, desde el punto de vista Gits, sus locales y remotos repositorios están en el mismo punto en el tiempo, a pesar de que su locales repositorio tiene cambios unstaged (cambios que tiene no git add ed).

Hay un diagrama agradable en la parte inferior de this page que muestra cómo funciona el proceso - hace algún cambio, organizar ellos (mediante la ejecución de git add), y finalmente se comprometan al repositorio (a través de la forma creativa llamada git commit).

Para ser claros: no estoy tratando de modificar mi repositorio remoto, solo hago que mi repositorio local se vea como el servidor.

Otros han señalado los métodos para hacer esto: git reset --hard HEAD (reajustar el índice [archivos etapas] y el árbol de trabajo [archivos unstaged] a la última confirmación), pero vale la pena tener una comprensión de lo que' Estoy tratando de lograr - si hubiera sabido cómo git estaba rastreando mis archivos la primera vez que arruiné mi árbol de trabajo, me habría ahorrado horas de preocupación.

2

Ya que no han cometido nada todavía, el siguiente comando se restablecerá sus archivos modificados:

git checkout . 
2

se puede tratar

git stash 
git pull origin your-branch 
0

git checkout branchname git reset --hard c4e0424 git push origin +branchname

Puede utilizar --soft en lugar de -hard
--hard PERDERá sus cambios
--soft deja tus archivos modificados de commit

Cuestiones relacionadas