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?

ryudice
fuente
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".

Olivier Verdier
fuente
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
sehe
fuente
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
Almir Campos
fuente
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

Birol Efe
fuente
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.

csi
fuente