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.