git reemplaza la versión local con la versión remota


148

¿Cómo puedo decirle a git que ignore mi archivo local y tome el de mi rama remota sin intentar fusionarme y causar conflictos?


1
Vea la respuesta SO " comando git para hacer una rama como otra " para todas las formas actuales posibles de simulargit merge -s their .
— VonC

Sería útil si pudiera proporcionar más detalles. ¿Desea adoptar el contenido de todos los archivos de la sucursal remota o solo algunos de los archivos (es decir, mantener algunas versiones / cambios locales)? ¿Tienes alguna historia local que quieras conservar? (Esto podría ser importante si hay otras sucursales o repositorios que ya han incorporado su historial local). Si desea mantener su historial local, ¿qué planea hacer con él más adelante? (Puede dejar una etiqueta apuntando al historial local y simplemente restablecer su rama a lo que tiene el control remoto, o puede que desee "fusionar la suya").
— Chris Johnsen

Respuestas:


169

Esta es la solución más segura:

git stash

Ahora puedes hacer lo que quieras sin temor a conflictos.

Por ejemplo:

git checkout origin/master

Si desea incluir los cambios remotos en la rama maestra, puede hacer lo siguiente:

git reset --hard origin/master

Esto hará que ramifiques "maestro" para que apunte a "origen / maestro".


90
Podría valer la pena señalar que esta se separará cabeza - El interrogador podría prefieren quedarse en la rama congit stash; git fetch origin; git reset --hard origin/master
— Marcos Longair

10
Creo que el comentario de Mark Longair es la respuesta real a esta pregunta

ha sido la respuesta más útil para mí +1
— Andres

¿Cómo volver al estado anterior al git stash? git stash listesta vacio.
— Leo

Quiero abrazarte
— Ugur Kazdal

45

Entiendo la pregunta de esta manera: desea reemplazar por completo el contenido de un archivo (o una selección) desde arriba. No desea afectar el índice directamente (por lo que debería pasar por add + commit como de costumbre).

Simplemente haz

git checkout remote/branch -- a/file b/another/file

Si desea hacer esto para subárboles extensos y, en cambio, desea afectar el índice directamente, use

git read-tree remote/branch:subdir/

Luego puede (opcionalmente) actualizar su copia de trabajo haciendo

git checkout-index -u --force

2
Esto es exactamente lo que quería. Gracias.
— AutonomousApps

11

Tengo entendido que, por ejemplo, guardó erróneamente un archivo que había actualizado solo con fines de prueba. Luego, cuando ejecuta "git status", el archivo aparece como "Modificado" y dice algunas palabras malas. Solo desea recuperar la versión anterior y continuar trabajando normalmente.

En ese escenario, puede ejecutar el siguiente comando:

git checkout -- path/filename

10

Verificaría el archivo remoto del "maestro" (el repositorio remoto / de origen) de esta manera:

git checkout master <FileWithPath>

Ejemplo: git checkout master components / indexTest.html


Para mí funcionó así "git checkout remotes / origin / master <my-file>"
— saravanakumar

4

Use la opción -so --strategycombinada con la -Xopción. En su pregunta específica, desea conservar todos los archivos remotos y reemplazar los archivos locales del mismo nombre.

Reemplazar conflictos con la versión remota

git merge -s recursive -Xtheirs upstream/master  

utilizará la versión de repositorio remoto de todos los archivos en conflicto.

Reemplazar conflictos con la versión local

git merge -s recursive -Xours upstream/master

utilizará la versión de repositorio local de todos los archivos en conflicto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.