2011-06-13 19 views
144

Estoy usando Git 1.7.4.1. Quiero conseguir la última versión de mi código desde el repositorio, pero estoy consiguiendo errores ...git: ¿Cómo obtengo la última versión de mi código?

$ git pull 
…. 
M selenium/ant/build.properties 
…. 
M selenium/scripts/linux/get_latest_updates.sh 
M selenium/scripts/windows/start-selenium.bat 
Pull is not possible because you have unmerged files. 
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'. 

He suprimido las copias locales de los archivos de la herramienta se queja, pero sigo teniendo los errores. ¿Cómo reviso la última versión del repositorio remoto? - Dave

+1

@ respuesta de Kzqai continuación me ayudó: tratar simplemente haciendo 'git fetch' primero.No estaba recibiendo conflictos, pero es la forma en que obtuve la última versión del código. –

Respuesta

7

Primero debe fusionar los archivos. Haga un git status para ver cuáles son los archivos que deben combinarse (significa que primero debe resolver los conflictos). Una vez hecho esto, haga git add file_merged y vuelva a hacer su pull.

+2

Gracias. Estaba enfrentando este problema. Tengo algunos cambios en mis archivos de trabajo, que no quiero comprometer. Pero no puedo hacer un truco en este caso. Así que lo hago - git stash, git pull --rebase, git stash pop. A continuación, fusionar manualmente y agregar git file_merged – RuntimeException

192

Si no se preocupan por los cambios locales (incluyendo archivos o subrepositories sin seguimiento o generados, que acaba de pasar a estar aquí) y sólo quiere una copia de la cesión temporal:

git reset --hard HEAD 
git clean -xffd 
git pull 

Una vez más, esto va a bombardear cualquier cambio que haya realizado localmente, así que úselo con cuidado. Piense en rm -Rf al hacer esto.

+1

Probé estos comandos y aún recibí el error "CONFLICTO (contenido): conflicto de mezcla en selenium/ant/build.xml" (entre otros). Solo quiero sobrescribir la última versión de mi archivo con lo que está en el repositorio. ¿¿Que puedo hacer?? – Dave

+19

'git clean -f' no es realmente parte de la respuesta. Eliminará los archivos que no se guardan en el repositorio (por ejemplo, en mi caso, archivos de registro); no es necesario hacer esto para que 'git pull' vuelva a funcionar, solo' git reset --hard HEAD' es suficiente. –

+0

@Dave Si, como yo, hubieras hecho un commit en la versión local (por ejemplo, en un intento fallido de hacer feliz a git para que 'git pull' funcione !!), y estarás feliz de desechar esa confirmación local, luego use 'git log' para descubrir la identificación de la confirmación antes, luego use eso en lugar de HEAD en la llamada a' git reset --hard HEAD'. P.ej. 'git reset --hard a12312' –

2

Si solo quiere tirar todo lo que está en su carpeta de trabajo (por ejemplo, los resultados de una fusión fallida o abortada) y volver a una confirmación previa limpia, haga un git reset --hard.

0

Me parece que tienes problemas con core.autocrlf. core.autocrlf = true puede dar problemas como los que describes en Windows si las nuevas líneas CRLF se registraron en el repositorio. Intenta deshabilitar core.autocrlf para el repositorio y realiza un hard-reset.

1

entiendo que desea enviar a la papelera los cambios locales y tire hacia abajo lo que está en el mando a distancia?

Si todo lo demás falla, y si (bastante comprensiblemente) teme "reiniciar", lo más simple es clonar el origen en un nuevo directorio y desechar el anterior.

16

Sospecho que lo que ha ocurrido puede ser que haya eliminado los archivos que haya modificado (debido a que no se preocupa por esos cambios) y ahora está tomando el git eliminación que haber un cambio.

Este es un enfoque que traslada los cambios de su copia de trabajo al "alijo" (recuperable si resulta que alguna vez los necesita de nuevo), por lo que puede extraer los últimos cambios del flujo ascendente .

git stash 
git pull 

Si alguna vez desea recuperar sus archivos (posibles conflictos con los cambios ascendentes y todos), ejecute un git stash apply para pegar esos cambios en la parte superior de su código. De esta manera, usted tiene un enfoque de "deshacer".

+0

probablemente me recomiendan el uso de 'git alijo pop' menos que desee un historial de sus alijos git – Rapnar

150

Caso 1: No me importa acerca de los cambios locales

  • Solución 1: Obtener el código más reciente y restablecer el código

    git fetch origin 
    git reset --hard origin/[tag/branch/commit-id usually: master] 
    
  • Solución 2: Eliminar la carpeta y clonar nuevamente: D

    rm -rf [project_folder] 
    git clone [remote_repo] 
    

Caso 2: Cuidado sobre los cambios locales

  • Solución 1: no hay conflictos con nueva versión en línea

    git fetch origin 
    git status 
    

    reportará algo como:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. 
    

    a continuación, obtener la última versión

    git pull 
    
  • Solución 2: conflictos con nueva versión en línea

    git fetch origin 
    git status 
    

    reportará algo como:

    error: Your local changes to the following files would be overwritten by merge: 
        file_name 
    Please, commit your changes or stash them before you can merge. 
    Aborting 
    

    confirmar los cambios locales

    git add . 
    git commit -m ‘Commit msg’ 
    

    Intentar obtener los cambios (fallará)

    git pull 
    

    informará algo como:

    Pull is not possible because you have unmerged files. 
    Please, fix them up in the work tree, and then use 'git add/rm <file>' 
    as appropriate to mark resolution, or use 'git commit -a'. 
    

    Abrir el archivo de conflictos y solucionar el conflicto. Entonces:

    git add . 
    git commit -m ‘Fix conflicts’ 
    git pull 
    

    informará algo como:

    Already up-to-date. 
    

Más información: How do I use 'git reset --hard HEAD' to revert to a previous commit?

+0

@ tvl.How puedo obtener más sin cometer mi código (tener conflictos) a branch..please ayúdame – user3354457

+0

@ user3354457 XM , interesante pregunta. Nunca lo he intentado antes, pero puedes intentarlo y reportarlo;) así que: - Haz un parche con los cambios: git diff> uncommited-changes.patch - Restablece la rama - activa los cambios - aplica la parche – tvl

+1

Esta respuesta merece mucho más votos favorables que la que se ha aceptado como respuesta. – James

1

ejecutando este comando obtendrá la etiqueta más reciente que por lo general es la versión de su proyecto:

git describe --abbrev=0 --tags 
0

tratar este código

cd /go/to/path 
git pull origin master 
+1

¡Bienvenido a Stackoverflow! Por favor considerar la adición de alguna explicación de su solución para describir mejor la forma en que resuelve el problema. Eso hará que tus respuestas sean aún más útiles – dkackman

Cuestiones relacionadas