2010-06-11 18 views
229

he estado siguiente árbol de trabajoGit: no se puede deshacer los cambios locales (error: camino ... es sin combinar)

$ git status foo/bar.txt 
# On branch master 
# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
#  deleted by us:  foo/bar.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Archivo foo/bar.txt está ahí y quiero conseguir que el "estado sin cambios" de nuevo (similar a 'svn revert'):

$ git checkout HEAD foo/bar.txt 
error: path 'foo/bar.txt' is unmerged 
$ git reset HEAD foo/bar.txt 
Unstaged changes after reset: 
M  foo/bar.txt 

Ahora cada vez es más confuso:

$ git status foo/bar.txt 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: foo/bar.txt 
# 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: foo/bar.txt 
# 

El mismo archivo en ambas secciones, ne w y modificado? ¿Que debería hacer?

+1

Me gustaría que alguien podría explicar cómo hemos llegado a esta situación, por eso * * sucede, y por qué funciona la solución. –

Respuesta

389

Lo hizo de manera incorrecta. Primero se debe restablecer, para dejar de grabar el archivo y luego realizar la compra, para revertir los cambios locales.

Prueba esto:

$ git reset foo/bar.txt 
$ git checkout foo/bar.txt 
+0

Gracias; ¡trabajado como un encanto! Tuve que comprometer (_not_ con el -a arg, los cambios relevantes ya estaban organizados) y luego pude empujar/tirar como de costumbre. – Patrick

+15

Para mí se requiere un:
$ git reset - foo/bar.txt
$ git checkout - foo/bar.txt
(Observe el extra "-" en el medio) – Jan

+0

Para mí, git reset resets * all * archivos, no solo el listado ... ¿Hice algo mal? – Zds

-3
git checkout foo/bar.txt 

¿lo intentó? (sin una palabra clave HEAD)

Por lo general, revertir mis cambios de esta manera.

+0

Error típico al intentar un 'checkout' en medio de una fusión: ' $ git co path/to/file' = result => 'error: ruta 'ruta/a/archivo' no está conectada' => entonces , primera ejecución: '$ git reset path/to/file', y luego la' git checkout path/to/file' debería funcionar. – michael

+0

Si no se especifica HEAD, la comprobación de salida de git se realizará desde el índice, que es una operación más débil (la fuente de contenido es el índice en lugar de HEAD). Además, no creo que eso marque la diferencia en este caso, con el problema específico que plantea la pregunta. ¿Lo * intentaste *? – Kissaki

-4

me parece git stash muy útil para el manejo temporal de todos los estados 'sucios'.

+4

el alijo no funciona una vez que haya cambiado los cambios – Rob

+3

Si le resulta útil, explique cómo podría ayudar en este caso concreto. ¿Cómo lo usarías aquí? – Kissaki

9
git checkout origin/[branch] . 
git status 

// Note dot (.) Al final. Y todo estará bien

21

Esto funcionó perfectamente para mí:

$ git reset -- foo/bar.txt 
$ git checkout foo/bar.txt 
Cuestiones relacionadas