git: ¿Cómo obtengo la última versión de mi código?

200

Estoy usando Git 1.7.4.1. Quiero obtener la última versión de mi código del repositorio, pero recibo errores ...

$ 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'.

Eliminé las copias locales de los archivos de los que se queja la herramienta, pero sigo recibiendo los errores. ¿Cómo verifico la última versión del repositorio remoto? - Dave

Dave
fuente
1
La respuesta de @ Kzqai a continuación me ayudó: intente hacerlo git fetchprimero. No recibía conflictos, pero es así como obtuve la última versión del código.
Chris K

Respuestas:

258

Si no le importan los cambios locales (incluidos los archivos o subrepositorios no rastreados o generados que simplemente están aquí) y solo quiere una copia del repositorio:

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

Nuevamente, esto afectará cualquier cambio que haya realizado localmente, así que úselo con cuidado. Piensa rm -Rfen hacer esto.

Alex Curtis
fuente
1
Intenté estos comandos y aún recibí el error "CONFLICTO (contenido): Combinar conflicto 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
31
git clean -fNo 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 necesita hacer esto para volver a git pulltrabajar, solo git reset --hard HEADes suficiente.
Darren Cook
12
Esh, hombre, no recomiendo uno de los pocos comandos de eliminación para git novatos.
Kzqai
66
@DarrenCook Creo que git clean -fes importante si quieres una limpieza real de tu repositorio. Es el equivalente a hacer un "Eliminar todo de la carpeta -> Obtener la última versión / Obtener específico" en TFS y en mi caso, esto es lo que quería.
RPDeshaies
3
@Darren, creo que git clean -f`` también es importante. Quiero obtener la última versión, y no quiero mantener entradas de cachés obsoletas u otros recursos generados que no están en el repositorio. La respuesta es clara sobre el hecho de que eliminará el cambio local e imitará la última versión del repositorio, por lo que me parece perfecto. Movería mis archivos de registro a otro lugar si realmente necesito mantenerlos entre actualizaciones.
Balmipour
231

Caso 1: no me importan los cambios locales

  • Solución 1: obtenga el último código y restablezca el código

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

    rm -rf [project_folder]
    git clone [remote_repo]
    

Caso 2: preocuparse por los cambios locales

  • Solución 1: sin conflictos con la nueva versión en línea

    git fetch origin
    git status
    

    informará algo como:

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

    Entonces obtén la última versión

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

    git fetch origin
    git status
    

    informará 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
    

    Compromete tus cambios locales

    git add .
    git commit -m ‘Commit msg’
    

    Intenta 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'.
    

    Abra el archivo de conflicto y solucione el conflicto. Luego:

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

    informará algo como:

    Already up-to-date.
    

Más información: ¿Cómo uso 'git reset --hard HEAD' para volver a un commit anterior?

tvl
fuente
@ tvl. ¿Cómo puedo obtener las últimas actualizaciones sin comprometer mi código (tener conflictos) a la bifurcación ... por
favor ayúdenme
@ user3354457 xm, pregunta interesante. Nunca he intentado esto antes, pero puede intentarlo e informar;) entonces: - Haga un parche con los cambios: git diff> uncommited-changes.patch - Restablezca la rama - extraiga los cambios - aplique el parche
tvl
3
Esta respuesta merece muchos más votos a favor que la que ha sido aceptada como respuesta.
James
@ James :) Me alegra que mi respuesta te ayude. Consejo, intente escribir documentación como si no supiera nada sobre un tema y definitivamente la verbosidad lo ayudará a regresar.
tvl
44
La mejor respuesta completa para git fetch. Esta publicación debe estar bloqueada
Callat
17

Sospecho que lo que sucedió puede ser que haya eliminado los archivos que modificó (porque no le importaban esos cambios) y ahora git está tomando la eliminación como un cambio.

Aquí hay un enfoque que mueve sus cambios fuera de su copia de trabajo y los coloca en el "alijo" (recuperable si realmente resulta que alguna vez los necesita de nuevo), para que luego pueda extraer los últimos cambios desde la parte superior.

git stash  
git pull

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

Kzqai
fuente
1
Probablemente recomiendo usar a git stash popmenos que quieras un historial de tus
escondites de
7

Tienes que fusionar tus archivos primero. Haga una git statuspara ver cuáles son los archivos que deben fusionarse (significa que primero necesita resolver los conflictos) Una vez hecho esto, haz git add file_mergedy haz tu pullotra vez.

Amokrane Chentir
fuente
2
Gracias. Estaba enfrentando este problema. Tengo algunos cambios en mis archivos de trabajo, que no quiero comprometer. Pero no puedo hacer un git pull en este caso. Entonces lo hago - git stash, git pull --rebase, git stash pop. Luego, combine manualmente y agregue file_merged
RuntimeException el
6

prueba este código

cd /go/to/path
git pull origin master
Amirouche Zeggagh
fuente
55
¡Bienvenido a Stackoverflow! Considere agregar alguna explicación a su solución para describir mejor cómo resuelve el problema. Eso hará que sus respuestas sean aún más útiles
dkackman
2

Si solo desea deshacerse de todo 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.

Damian
fuente
1

Entiendo que quieres tirar a la basura tus cambios locales y desplegar lo que está en tu control remoto.

Si todo lo demás falla, y si tiene (bastante comprensible) miedo de "restablecer", lo más simple es simplemente clonar el origen en un nuevo directorio y desechar el anterior.

Dan Ray
fuente
1

Al ejecutar este comando, obtendrá la etiqueta más reciente que generalmente es la versión de su proyecto:

git describe --abbrev=0 --tags
ReCatCoder
fuente
0

A mí me parece que estás teniendo problemas de core.autocrlf. core.autocrlf = true puede generar problemas como los que usted describe en Windows si las nuevas líneas CRLF se registraron en el repositorio. Intente deshabilitar core.autocrlf para el repositorio y realice un restablecimiento completo.

kusma
fuente
0

Si está utilizando Git GUI, primero busque y luego combine.

Recuperar a través del menú remoto >> Recuperar >> Origen. Fusionar a través del menú Fusionar >> Fusionar local.

Aparece el siguiente cuadro de diálogo.

ingrese la descripción de la imagen aquí

Seleccione el botón de radio de la rama de seguimiento (también seleccionado de forma predeterminada), deje el cuadro amarillo vacío y presione combinar y esto debería actualizar los archivos.

Ya había revertido algunos cambios locales antes de seguir estos pasos, ya que quería descartarlos de todos modos para no tener que eliminarlos mediante la fusión posterior.

zar
fuente