2012-02-16 18 views
32

Acabo de empezar a aprender a usar git hoy, progresando bien.¿Por qué git pull no trae directorios que he eliminado?

Como experimento, utilicé push para cargar dos directorios (que contienen dos archivos cada uno) y dos archivos en el directorio raíz. Esto funcionó bien.

Luego borré uno de los dos directorios que tengo localmente (pero no en git). Cuando uso git status parece ser consciente de ello:

deleted: test/Testfile.as
deleted: test/Testile2.as

Pero cuando se utiliza git pull para conseguir mis archivos de nuevo, que no parecen volver a mi carpeta local . También probé git fetch.

La única manera en que puedo recuperar todo es git clone, pero eso no parece lógico ya que necesito eliminar mi directorio maestro localmente y luego volver a clonarlo (o bien, especificar una nueva ubicación para el archivos clonados).

¿Cuál es la forma adecuada de recuperar archivos y carpetas de github que se han eliminado localmente?

+1

Un concepto clave es posible que se echa en falta es que el empuje y atracción son acerca de la transferencia * * comete entre el repositorio remoto y local. Si desea lidiar con las diferencias entre su árbol de trabajo y la confirmación actualmente desprotegida, se trata de una operación completamente local. – Cascabel

Respuesta

48

git pull simplemente fusiona las confirmaciones exageradas en su directorio de trabajo y no va a restaurar su directorio borrado (pero podría advertirle sobre los conflictos.)

Si ha eliminado las carpetas en el directorio de trabajo, usted tiene que do:

git checkout -- test 

para recuperarlo.

O puede hacer git reset --hard para llevar completamente su directorio de trabajo al estado HEAD.

+0

Gracias, esto funcionó. Al reverso de esta pregunta, ¿por qué los directorios de git no se eliminan cuando 'git push' después de eliminarlos localmente? – Marty

+0

@MartyWallace - tienes que hacer un 'git rm' y organizar el borrado, el commit y el push. – manojlds

3

git pull se fusionarán en los cambios. piénsalo como un archivo que has modificado. un git pull no reemplaza el contenido del archivo con la copia de controles remotos si lo ha modificado. incluso si hay un cambio conflictivo, entonces simplemente te advierte de un avance rápido.

Si usted tiene su repositorio en un estado en el que la eliminación es el único cambio no comprometida, y quiere deshacerlo, y luego hacer un git reset head --hard

O, si usted tiene otros cambios que desea dejar en su lugar, hacer git checkout -- test

13

desea devolver su repositorio a la versión de trabajo anterior. este es un trabajo para git-reset.

git reset --hard 

asegúrese de leer a través de este useful explanation of git-reset

usted podría también echa un vistazo a los archivos si desea:

git checkout -- test/ 
-1

git reset --hard <commit hash> significa CABEZA estará apuntando a una confirmación en concreto y cualquier confirmaciones has creado después de que el commit hash no esté disponible. La razón de esto es porque está señalando HEAD para separar HASH de confirmación. Si empujas a la fuerza, perderás todas las confirmaciones.

Nota: Tenga cuidado al usar el comando git reset --hard en git.

1

Aparte de git pull y git checkout, git revert también será útil para recuperar los archivos borrados

Cuestiones relacionadas