Un reemplazo para git merge
eso sobrescribirá los archivos no rastreados
Los comentarios a continuación usan 'FOI' para los 'archivos de interés', los archivos que
- existir en la rama donante,
- no existen en la rama receptora,
- y están bloqueando la fusión porque están presentes y sin seguimiento en su directorio de trabajo.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
Un reemplazo para git pull
eso sobrescribirá los archivos no rastreados
pull = fetch + merge
, así que git fetch
seguimos con el git checkout -f, git checkout, git merge
truco anterior.
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
Explicación detallada
git merge -f
no existe, pero git checkout -f
existe.
Usaremos git checkout -f
+git checkout
para eliminar los archivos de interés (ver arriba), y luego su fusión puede continuar normalmente.
Paso 1. Este paso reemplaza por la fuerza el FOI no rastreado con versiones rastreadas de la rama donante (también verifica la rama donante y actualiza el resto del directorio de trabajo).
git checkout -f donor-branch
Paso 2. Este paso elimina el FOI porque son rastreados en nuestra rama actual (donante) y ausentes en el receiving-branch
cambio a.
git checkout receiving-branch
Paso 3. Ahora que el FOI está ausente, la fusión en la rama donante no sobrescribirá ningún archivo no rastreado, por lo que no obtenemos errores.
git merge donor-branch