¿Cómo ignoro un error en ‘git pull’ acerca de que mis cambios locales serían sobrescritos por fusión?

¿Cómo ignoro el siguiente mensaje de error en Git pull?

Sus cambios locales a los siguientes archivos se sobrescribirán mediante fusión

¿Qué pasa si quiero sobrescribirlos?

He intentado cosas como git pull -f , pero nada funciona.

Para ser claro, solo quiero sobrescribir cambios específicos, no todo.

Si desea eliminar todos los cambios locales de su copia de trabajo, simplemente guárdelos:

 git stash save --keep-index 

Si ya no los necesitas, ahora puedes dejar ese alijo:

 git stash drop 

Si desea sobrescribir solo partes específicas de sus cambios locales, hay dos posibilidades:

  1. Cometa todo lo que no desee sobrescribir y utilice el método anterior para el rest.
  2. Use git checkout path/to/file/to/revert para los cambios que desea sobreescribir. Asegúrate de que el archivo no esté en escena mediante git reset HEAD path/to/file/to/revert .

Bien, con la ayuda de las otras dos respuestas, he encontrado una solución directa:

 git checkout HEAD^ file/to/overwrite git pull 

Esto funciona para que anule todos los cambios locales y no requiera una identidad:

 git reset --hard git pull 

Aquí hay una solución que descarta cambios por etapas:

 git reset file/to/overwrite git checkout file/to/overwrite 

Puede confirmar sus cambios antes de realizar la fusión, o los esconde:

  1. git stash save
  2. git merge origin/master
  3. git stash pop

Mi solución para resolver este problema fue:

 git checkout --  

Entonces podría sobreescribir el archivo simplemente usando:

 git pull 

Si su repository contiene algunos archivos que se eliminan del master :

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

En el Git reciente, puede agregar -r / --rebase on pull para volver a establecer la base de su bifurcación actual en la parte superior de la bifurcación ascendente después de la recuperación. La advertencia debería desaparecer, pero existe el riesgo de que tengas algunos conflictos que tendrás que resolver.


Alternativamente, puede verificar diferentes twigs con fuerza, luego volver a master nuevamente, por ejemplo:

 git checkout origin/master -f git checkout master -f 

Luego tire de nuevo como de costumbre:

 git pull origin master 

El uso de este método puede ahorrarle tiempo de almacenamiento ( git stash ) y posibles problemas de permisos, git reset HEAD --hard archivos ( git reset HEAD --hard ), eliminación de archivos ( git clean -fd ), etc. También lo anterior es más fácil de recordar.

Este problema se debe a que ha realizado cambios de forma local en el / los archivo / sy el mismo archivo / s existe con los cambios en el repository de Git, por lo que antes de tirar / empujar necesitará cambios locales ocultos:

Para sobrescribir cambios locales de un solo archivo:

 git reset file/to/overwrite git checkout file/to/overwrite 

Para sobrescribir todos los cambios locales (cambios en todos los archivos):

 git stash git pull git stash pop 

También este problema puede deberse a que está en una twig que no está fusionada con la twig principal.

A veces, ninguno de estos funciona. De manera molesta, debido a lo que creo que es LF, lo que funcionará es eliminar los archivos y luego tirar. No es que recomiende esta solución, pero si el archivo no existe, git no le informará inútilmente que sus cambios (que incluso pueden no ser cambios) quedarán anulados, y le permitirán continuar.

Úselo bajo su propio riesgo.

Puede usar esto para sobrescribir el archivo

 git checkout file_to_overwrite 

Si desea sobrescribir cambios específicos, necesita alguna forma de decirle cuáles desea olvidar.

Podrías tratar de esconder selectivamente los cambios que deseas abandonar usando git stash --patch y luego git stash --patch ese alijo con git stash drop . A continuación, puede incorporar los cambios remotos y fusionarlos de forma normal.

La mejor manera de resolver este problema es:

 git checkout --  

Después de eso, puede sobrescribir el archivo por:

 git pull origin master 

Tuve un caso especial de esto: tenía un archivo con –assume-sin cambios en él. Fue difícil localizarlo, ya que el comando de git status no mostraba ningún cambio

Esto funcionó para que descarte los cambios en el servidor remoto activo y tire del control fuente GitHub:

 git reset --hard git pull origin master 

Si desea mantener los cambios de producción en el servidor, simplemente fusione en un nuevo elemento de configuración. El método de procesamiento es el siguiente:

 git stash git pull git stash pop 

Tal vez no ejecutes todas las operaciones. Usted puede saber lo que puede hacer a continuación.

Estaba ignorando un archivo en mi repository y cuando lo hice git pull upstream master up recibí el siguiente error:

error: los cambios locales en los siguientes archivos se sobrescribirán con merge: myfile.js. Por favor, confirme sus cambios o guárdelos antes de que pueda fusionar. Aborto

Para resolverlo hice lo siguiente

 git update-index --no-assume-unchanged myfile.js 

Luego hice el git status y recibí este mensaje

En branch master Su twig está detrás de ‘origin / master’ mediante 4 commits, y puede ser reenviada rápidamente. (use “git pull” para actualizar su sucursal local)

Cambios no realizados para commit: (use “git add …” para actualizar lo que se va a comprometer) (use “git checkout – …” para descartar cambios en el directorio de trabajo)

modified: myfile.js

no se agregaron cambios a commit (use “git add” y / o “git commit -a”)

Luego hice git checkout myfile.js seguido de git pull upstream master . Esta vez la operación de extracción de git fue exitosa.

Aquí está mi estrategia para resolver el problema.

Planteamiento del problema

Necesitamos hacer cambios en más de 10 archivos. Probamos PULL (git pull origin master) , pero Git gritó:

error: sus cambios locales en los siguientes archivos se sobrescribirán mediante fusión: por favor, confirme sus cambios o guárdelos antes de que pueda fusionar.

Intentamos ejecutar commit y luego pull , pero tampoco funcionó.

Solución

De hecho, estábamos en la etapa sucia porque los archivos estaban en el “Área de ensayo”, también conocido como “Área de índice”, y algunos estaban en el “Área principal”, también conocido como “directorio Git local”. Y queríamos sacar los cambios del servidor.

Consulte este enlace para obtener información sobre las diferentes etapas de Git de forma clara: GIT Stages

Seguimos los siguientes pasos

  • git stash (esto hizo que nuestro directorio de trabajo estuviera limpio. Sus cambios son almacenados en la stack por Git).
  • git pull origin master (Extraiga los cambios del servidor)
  • git stash apply (se git stash apply todos los cambios de la stack)
  • git commit -m 'message' (comprometió los cambios)
  • git push origin master (Empujó los cambios al servidor)
  • git stash drop (Suelta la stack)

Entendamos cuándo y por qué necesitas esconderte

Si estás en un estado sucio , significa que estás haciendo cambios en tus archivos y luego te ves obligado, por algún motivo, a tirar o cambiar a otra twig por un trabajo muy urgente, por lo que en este punto no puedes sacar o cambia hasta que confirmes tu cambio. El comando stash está aquí como una mano amiga.

Del libro ProGIT , 2da Edición:

A menudo, cuando has estado trabajando en una parte de tu proyecto, las cosas están en un estado desordenado y quieres cambiar de twig un poco para trabajar en otra cosa. El problema es que no desea hacer un compromiso de trabajo a medio hacer para poder volver a este punto más adelante. La respuesta a este problema es el comando git stash. El almacenamiento toma el estado sucio de su directorio de trabajo, es decir, sus archivos modificados rastreados y cambios por etapas, y lo guarda en una stack de cambios sin terminar que puede volver a aplicar en cualquier momento.

Me encontré con esto cuando salgo del maestro.

La forma en que lo manejé, usando Visual Studio;

  1. Primero, realicé el comando Deshacer en mi solución.
  2. Luego hice el proceso de extracción de Git.

¡Espero que esto ayude!

git stash save --keep-index no funcionó para mí.

debajo del comando funcionó como se esperaba.

 git reset --hard git pull 

Anula todos los cambios locales si no los necesita.

git reset --hard && git clean -df

Esto restablecerá y eliminará cualquier archivo sin seguimiento.

Si este error se debe a terminaciones de línea,

 git add git checkout mybranch 

trabajará. No estoy muy seguro de por qué funciona.

Para Pycharm, puedes hacer Git -> Revertir y luego tirar.

Este mensaje también puede ocurrir si se usa git-lfs y un puntero de archivo fue sobrescrito por un archivo real.

entonces usas:

 git stash git lfs migrate import git pull 

salida completa de mi caso

 λ git stash Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master' Encountered 1 file(s) that should have been pointers, but weren't: public/apple-touch-icon.png λ git pull Updating 5a4ad44..b25f79d error: Your local changes to the following files would be overwritten by merge: public/apple-touch-icon.png Please commit your changes or stash them before you merge. Aborting λ git lfs migrate import migrate: Fetching remote refs: ..., done migrate: Sorting commits: ..., done migrate: Rewriting commits: 100% (0/0), done migrate: Updating refs: ..., done migrate: checkout: ..., done λ git pull Updating 5d4ad47..a25c79a Fast-forward public/apple-touch-icon.png | Bin 2092 -> 130 bytes public/favicon.ico | Bin 6518 -> 1150 bytes 2 files changed, 0 insertions(+), 0 deletions(-) 

ver https://github.com/git-lfs/git-lfs/issues/2839

Lo he intentado con éxito, antes de tirar, vamos a confirmar todo el archivo que no ha confirmado, entonces no recibirá los mensajes de AS.