En mi sucursal tenía algunos archivos en .gitignore
En una rama diferente, esos archivos no lo están.
Quiero fusionar las diferentes ramas en la mía, y no me importa si esos archivos ya no se ignoran o no.
Lamentablemente me sale esto:
Los siguientes archivos de árbol de trabajo no rastreados se sobrescribirán mediante fusión
¿Cómo modificaría mi comando de extracción para sobrescribir esos archivos, sin tener que buscar, mover o eliminar esos archivos yo mismo?

Respuestas:
El problema es que no está rastreando los archivos localmente, pero los archivos idénticos se rastrean de forma remota, por lo que para "extraer" su sistema se vería obligado a sobrescribir los archivos locales que no están controlados por la versión.
Intenta correr
Esto rastreará todos los archivos, eliminará todos sus cambios locales a esos archivos y luego obtendrá los archivos del servidor.
fuente
git add -A .; git stashtrabajó para mi. Lagit add *variante se quejó de caminos ignorados.Puede probar el comando para borrar los archivos no rastreados del local
Git 2.11 y versiones más nuevas:
Versiones anteriores de Git:
Donde
-dse puede reemplazar con lo siguiente:-xlos archivos ignorados también se eliminan, así como los archivos desconocidos para Git.-deliminar directorios no rastreados además de archivos no rastreados.-fse requiere para forzarlo a correr.Aquí está el enlace que también puede ser útil.
fuente
-ipara el modo interactivo. Además de eliminar el directorio no deseado, también-xpuede doler.Los únicos comandos que funcionaron para mí fueron:
fuente
Un reemplazo para
git mergeeso sobrescribirá los archivos no rastreadosLos comentarios a continuación usan 'FOI' para los 'archivos de interés', los archivos que
Un reemplazo para
git pulleso sobrescribirá los archivos no rastreadospull = fetch + merge, así quegit fetchseguimos con elgit checkout -f, git checkout, git mergetruco anterior.Explicación detallada
git merge -fno existe, perogit checkout -fexiste.Usaremos
git checkout -f+git checkoutpara 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).
Paso 2. Este paso elimina el FOI porque son rastreados en nuestra rama actual (donante) y ausentes en el
receiving-branchcambio a.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.
fuente
Eliminar todos los archivos no rastreados:
fuente
Si se trata de una operación única, puede eliminar todos los archivos no rastreados del directorio de trabajo antes de realizar la extracción. Lea ¿Cómo eliminar archivos locales (sin seguimiento) del árbol de trabajo Git actual? para obtener información sobre cómo eliminar todos los archivos no rastreados.
Asegúrese de no eliminar accidentalmente el archivo sin seguimiento que aún necesita;)
fuente
Puedes probar ese comando
fuente
Actualización: una versión mejor
Esta herramienta ( https://github.com/mklepaczewski/git-clean-before-merge ):
git pullequivalentes,git pullequivalentes,git pullversión,--pretendopción que no modificará ningún archivo.Versión antigua
¿Cómo esta respuesta difiere de otras respuestas?
El método presentado aquí elimina solo los archivos que se sobrescribirán mediante la fusión. Si tiene otros archivos sin seguimiento (posiblemente ignorados) en el directorio, este método no los eliminará.
La solución
Este fragmento extraerá todos los archivos no rastreados que se sobrescribirán
git pully los eliminará.y luego simplemente hacer:
Este no es un comando de git porcelain, así que siempre verifique dos veces qué haría con:
Explicación: porque uno de los revestimientos da miedo:
Aquí hay un desglose de lo que hace:
git pull 2>&1- Capture lagit pullsalida y redirija todo a stdout para que podamos capturarlo fácilmentegrep.grep -E '^\s- la intención es capturar la lista de los archivos no rastreados que serían sobrescritos porgit pull. Los nombres de archivo tienen un montón de espacios en blanco delante de ellos, por lo que los utilizamos para obtenerlos.cut -f2-- eliminar espacios en blanco desde el comienzo de cada línea capturada en 2.xargs -I {} rm -rf "{}"-xargspara iterar sobre todos los archivos, guardar su nombre en "{}" y llamarrma cada uno de ellos. Usamos-rfpara forzar la eliminación y eliminación de directorios no rastreados.Sería genial reemplazar los pasos 1-3 con el comando de porcelana, pero no conozco ningún equivalente.
fuente
git pullcongit checkout <branch_name>Si considera usar la
-fbandera, primero puede ejecutarla como una ejecución en seco. Solo que sabes por adelantado qué tipo de situación interesante terminarás después ;-Pfuente
Además de la respuesta aceptada, por supuesto, puede eliminar los archivos si ya no los necesita especificando el archivo:
Recuerde ejecutarlo primero con la bandera -n si desea ver qué archivos eliminará git clean. Tenga en cuenta que estos archivos serán eliminados. En mi caso, no me importaron de todos modos, así que fue una mejor solución para mí.
fuente
Una forma de hacerlo es guardar los cambios locales y extraerlos del repositorio remoto. De esta manera, no perderá sus archivos locales ya que los archivos irán al alijo.
Puede verificar sus archivos escondidos locales usando este comando:
git stash listfuente
Para aquellos que no saben, git ignora las diferencias de nombre en mayúsculas / minúsculas en los archivos y carpetas. Esto resulta ser una pesadilla cuando los renombra al mismo nombre con un caso diferente.
Encontré este problema cuando cambié el nombre de una carpeta de "Petstore" a "petstore" (mayúsculas a minúsculas). Había editado mi archivo .git / config para dejar de ignorar las mayúsculas y minúsculas, hice cambios, aplasté mis commits y escondí mis cambios para moverme a una rama diferente. No pude aplicar mis cambios escondidos a esta otra rama.
La solución que encontré que funcionó fue editar temporalmente mi archivo .git / config para ignorar temporalmente el caso nuevamente. Esto causó
git stash applytener éxito. Entonces, cambié ignoreCase de nuevo afalse. Luego agregué todo excepto los nuevos archivos en la carpeta de la tienda de mascotas que git extrañamente afirmó que fueron eliminados, por cualquier razón. Cometí mis cambios, luego corrígit reset --hard HEADpara deshacerme de esos nuevos archivos sin seguimiento. Mi confirmación apareció exactamente como se esperaba: los archivos en la carpeta fueron renombrados.Espero que esto te ayude a evitar mi misma pesadilla.
fuente
git pull -fentoncesgit checkout .. Qué pesadilla.Ni clean / reset / hard checkout / rebase funcionó para mí.
Así que acabo de eliminar archivos de los que git se quejó *
* Verifiqué si estos archivos se pueden eliminar revisando un nuevo repositorio en una carpeta separada (los archivos no estaban allí)
fuente
En mi caso cuando tuve este problema. Tenía un archivo local que había renombrado en el control remoto.
Cuando
git pullintenté, Git me dijo que no se rastreaba el nuevo nombre de archivo, que estaba en el control remoto, aunque todavía no existía en el local.Debido a que no hubo ningún caso de forma local no podía hacerlo
git pullhasta que lo hicegit rmen el antiguo nombre de fichero (que no era evidente en un primer momento debido a mi estúpida idea de que el cambio de nombre).fuente
Si tiene los archivos escritos bajo .gitignore, elimine los archivos y ejecute git pull nuevamente. Eso me ayudó.
fuente