theirs strategy stackoverflow prevent one from español git git-merge gitignore

strategy - gitignore y "Los siguientes archivos del árbol de trabajo sin seguimiento se sobrescribirían al finalizar la compra"



git prevent file from merge (26)

Así que agregué una carpeta a mi archivo .gitignore.

Una vez que hago un git status me dice

# On branch latest nothing to commit (working directory clean)

Sin embargo, cuando intento cambiar de sucursal obtengo lo siguiente:

My-MacBook-Pro:webapp marcamillion$ git checkout develop error: The following untracked working tree files would be overwritten by checkout: public/system/images/9/thumb/red-stripe.jpg public/system/images/9/original/red-stripe.jpg public/system/images/8/thumb/red-stripe-red.jpg public/system/images/8/original/red-stripe-red.jpg public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg public/system/images/7/thumb/red-stripe-dark.jpg public/system/images/7/original/red-stripe-dark.jpg public/system/images/7/original/DSC07833.JPG public/system/images/6/thumb/red-stripe-bw.jpg public/system/images/6/original/website-logo.png public/system/images/6/original/red-stripe-bw.jpg public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg public/system/images/5/original/logocompv-colored-squares-100px.png public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg public/system/images/4/thumb/DSC_0001.JPG public/system/images/4/original/logo.png public/system/images/4/original/DSC_0001.JPG public/system/images/4/original/2-up.jpg public/system/images/3/thumb/logo2.gif public/system/images/3/original/logo2.gif public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg public/system/images/3/original/11002000962.jpg public/system/images/2/thumb/Profile Pic.jpg public/system/images/2/original/Profile Pic.jpg public/system/images/2/original/02 Login Screen.jpg public/system/images/1/original/Argentina-2010-World-Cup.jpg Please move or remove them before you can switch branches. Aborting

Así es como se ve mi archivo .gitignore:

.bundle .DS_Store db/*.sqlite3 log/*.log tmp/**/* public/system/images/* public/system/avatars/*

¿Cómo puedo hacer que esto funcione para poder cambiar de ramas sin eliminar esos archivos?

Si hago un cambio, ¿afectará a esos archivos? En otras palabras, si volviera a esta sucursal después, ¿todo sería perfecto hasta mi último compromiso?

No quiero perder esos archivos, simplemente no quiero que sean rastreados.


ADVERTENCIA: eliminará los archivos sin seguimiento, por lo que no es una gran respuesta a la pregunta que se plantea.

Golpeé este mensaje también. En mi caso, no quería guardar los archivos, así que esto funcionó para mí:

git 2.11 y más nuevo

git clean -d -fx .

git mayor

git clean -d -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x significa que los archivos ignorados también se eliminan, así como los archivos desconocidos para git.

  • -d significa eliminar directorios sin seguimiento además de los archivos sin seguimiento.

  • -f se requiere para forzarlo a correr.


2 archivos con el mismo nombre pero un caso diferente podría ser el problema.

Puedes eliminar uno de estos archivos o cambiarle el nombre. Ex:

Pdf.html.twig (The GOOD one) pdf.html.twig (The one I deleted)


Desafortunadamente, ni git rm --cached ni git clean -d -fx "" hicieron por mí.

Mi solución terminó siendo empujar mi sucursal a remoto, clonar un nuevo repositorio y luego hacer mi fusión en el nuevo repositorio. Otras personas que accedieron al repositorio tuvieron que hacer lo mismo.

Moraleja de la historia: use un archivo .gitignore desde el inicio.


Elimine el archivo .gitignore de appname / gen / para resolver este problema.


En mi caso git rm --cached no funcionó. Pero lo conseguí con un git rebase


En mi caso, el problema fue con los submódulos. master se fusionó con otra rama que agregó un nuevo submódulo al proyecto. La sucursal que estaba tratando de realizar el pago no la tenía, por eso git se quejaba de los archivos sin seguimiento y ninguna de las otras soluciones sugeridas funcionaron para mí. Forcé el pago a mi nueva sucursal y saqué al maestro.

  • git checkout -f my_branch
  • git pull origin master
  • git submodule update --init

En mi caso, estaba viendo este error porque estoy usando un popular CMS de código abierto y el directorio que causaba problemas era el directorio de subidas en el que escribe el CMS.

Entonces, lo que estaba diciendo es que hay archivos que no tienes, pero que no puedes obtener de las versiones.

Estoy capturando todos los archivos del sitio en vivo a mi local, luego verificaré esto en el repositorio con la esperanza de que esto solucione el problema.


Estas dos funciones (git rm --cached, git checkout -f another-branch) NO me funcionaron.

En cambio, quité físicamente el archivo (en eclipse) como lo que Git te dice que hagas; Muévalos o elimínelos antes de poder cambiar de rama.

y luego lo agrego / cometo.

Y luego tiré y funcionó!


Esto funcionó para mí.

1. git fetch --all 2. git reset --hard origin/{branch_name}


Esto me sucedió en un sistema Windows 8 , usando Git desde el símbolo del sistema. El resto de mi equipo usa TFS , y yo uso git-tf de Microsoft para empujar / jalar entre TFS y mi repositorio local de Git.

El problema surgió debido a que algunos archivos habían sido renombrados solo para cambiar su caso . Lo que parece haber ocurrido fue esto:

  • Los archivos se registraron con una caja mixta en sus nombres.
  • En una confirmación posterior, los nombres de los archivos se cambiaron a minúsculas.
  • git-tf inicialmente consiguió los archivos en un caso mixto.
  • Cuando se cambió el nombre de los archivos a minúsculas, git-tf no obtuvo los archivos porque para Windows 8 esos nombres de archivos son equivalentes.
  • Como Git distingue entre mayúsculas y minúsculas, se quejó de que tenía los archivos de casos mixtos que no estaban en control de código fuente. Pero al usar el git status , no pude ver ningún cambio, ya que en el símbolo del sistema de Windows esos nombres de archivo son equivalentes.

La solución más simple para mí fue:

  • git checkout una versión anterior del proyecto, mucho antes de que se agregaran esos archivos .
  • Luego git checkout la última versión del proyecto, con la carcasa de archivo correcta.

Esto podría ser un problema de permiso,

cambiar la propiedad,

sudo chown -v -R usr-name:group-name folder-name


Git le está diciendo que quiere crear archivos (llamado public/system/images/9/... etc), pero ya tiene archivos existentes en ese directorio que Git no rastrea. Tal vez alguien más haya agregado esos archivos al repositorio de Git, ¿y esta es la primera vez que cambia a esa rama?

Probablemente hay una razón por la que esos archivos en tu rama de develop , pero no en tu rama actual. Es posible que tenga que preguntar a sus colaboradores por qué es eso.

¿Cómo puedo hacer que esto funcione para poder cambiar de ramas sin eliminar esos archivos?

No puedes hacerlo sin hacer que los archivos desaparezcan de alguna manera. Puedes cambiar public nombre de public a my_public o algo por ahora.

si volviera a esta sucursal después, ¿todo sería perfecto hasta mi último compromiso?

Si comprometes tus cambios, Git no los perderá. Si no confirma los cambios, Git intentará realmente no sobrescribir el trabajo que ha realizado. De eso es de lo que Git te está advirtiendo en primera instancia aquí (cuando intentaste cambiar de rama).


Hay un comando para esta tarea delicada (eliminar de forma permanente los archivos sin seguimiento)

git clean -i

Entonces git pull servirá.


La mayoría de las respuestas consideran la eliminación o eliminación de archivos, que es la forma más fácil. Pero a veces no quieres deshacerte de los archivos locales. Pero fusionarse con una estrategia, git también tiene solución para esto;

git merge --strategy=ours master


Para aquellos que necesitan algo menos que share de share ,

git clean -f

probablemente funcionará. Recomiendo encarecidamente correr

git clean --dry-run

primero. Ese comando generará una lista de archivos que Git eliminará si ejecuta git clean -f , y podría ahorrarle el dolor de eliminar involuntariamente algo que no deseaba.

Consulte esta respuesta de Stack Oveflow o la documentación para obtener más información sobre git clean .


Parece que desea que se ignoren los archivos pero ya se han comprometido. .gitignore no tiene ningún efecto en los archivos que ya están en el repositorio, por lo que deben eliminarse con git rm --cached . El - en --cached evitará que tenga algún efecto en su copia de trabajo y solo se marcará como eliminado la próxima vez que realice la confirmación. Una vez que los archivos se eliminan del repositorio, el .gitignore evitará que se vuelvan a agregar.

Pero tiene otro problema con su .gitignore, está utilizando excesivamente comodines y está causando que coincida menos de lo que espera. En su lugar, cambiemos el .gitignore e intentemos esto.

.bundle .DS_Store db/*.sqlite3 log/*.log tmp/ public/system/images/ public/system/avatars/


Si desea resolver rápidamente esta pregunta, puede usar este comando:

git checkout -f dev


Si está en OS X, puede ser porque el nombre de un archivo ha tenido ciertos caracteres cambiar de caso. Intenta configurar la siguiente opción de configuración:

git config core.ignorecase true


Si ha cambiado el nombre de un archivo localmente y luego realiza una pull , mostrará ese mensaje de error.


Simplemente borre los archivos o renómbrelos.

p.ej

$ git pull Enter passphrase for key ''/c/Users/PC983/.ssh/id_rsa'': error: Your local changes to the following files would be overwritten by merge: ajax/productPrice.php Please commit your changes or stash them before you merge. error: The following untracked working tree files would be overwritten by merge: ajax/product.php Please move or remove them before you merge. Aborting Updating a04cbe7a..6aa8ead5

Tuve que cambiar el nombre / eliminar ajax / product.php y ajax / produtPrice.php .

No te preocupes, Git Pull los traerá de vuelta. Le sugiero que cambie el nombre de ellos en lugar de eliminarlos, ya que podría perder algunos cambios.

Si esto no funciona, entonces tienes que eliminar toda la Rama y crearla nuevamente y luego hacer que git pull origin remotebranch


Simplemente fui al sistema de archivos y eliminé el archivo directamente, luego continué con git checkout y funcionó.

He tenido el problema varias veces y puede estar relacionado con los desarrolladores que hacen eliminar, empujar, volver a agregar, empujar o algo así.


También estaba enfrentando un problema similar y probé todas las soluciones publicadas anteriormente, pero no funcionó

El problema se produjo cuando onMusicUpdateListener.java nombre de mi onMusicUpdateListener.java a OnMusicUpdateListener.java en la rama de develop .

Ahora el master tenía onMusicUpdateListener.java y el develop tenía el mismo archivo que OnMusicUpdateListener.java

Ahora cada vez que cambiaba a master me daba un error.

The following untracked working tree files would be overwritten by checkout

y luego se aborted .

Para resolver esto, checked out fuerza checked out rama master y luego onMusicUpdateListener.java mi onMusicUpdateListener.java a OnMusicUpdateListener.java , la OnMusicUpdateListener.java y luego la onMusicUpdateListener.java con la rama develop .

Luego actualicé mi rama de develop merging con la master y ahora todo vuelve a la normalidad y el problema está resuelto.


Tuve el mismo problema al pagar en una sucursal en base a un compromiso anterior. Git se negó a pagar debido a los archivos sin seguimiento.

He encontrado una solución y espero que te sirva de ayuda.

Al parecer, no es suficiente agregar los directorios afectados a .gitignore y emitir $ git rm -r --cached en ellos.

Suponga que desea hacer una rama basada en un commit K anterior para probar algunas cosas y volver a la versión actual. Lo haría en los siguientes pasos:

  1. Configure los archivos sin .gitignore : edite el .gitignore y aplique $ git rm -r --cached en los archivos y directorios que desea que ignore el git. Agregue también el archivo .gitignore a .gitignore y no olvide emitir $ git rm -r --cached .gitignore . Esto asegurará que el comportamiento de ignorar de git deje lo mismo en las confirmaciones anteriores.

  2. Confirma los cambios que acabas de hacer:

    $ git add -A
    $ git commit

  3. Guarde el registro actual, de lo contrario puede tener problemas para volver a la versión actual

    $ git log > ../git.log

  4. Restablecimiento completo de la confirmación K

    $ git reset --hard version_k

  5. Crea una rama basada en el commit K

    $ git branch commit_k_branch

  6. Checkout en esa rama

    $ git checkout commit_k_branch

  7. Haz tus cosas y compromételo.

  8. Salida de nuevo en el maestro de nuevo

    $ git checkout master

  9. Restablecer a la versión actual de nuevo

    $ git reset current_version o $ git reset ORIG_HEAD

  10. Ahora puedes resetear duro a la CABEZA

    git reset --hard HEAD

¡NOTA! No omita el paso siguiente al último (como, por ejemplo, $ git reset --hard ORIG_HEAD ), de lo contrario, los archivos sin seguimiento que git se quejó anteriormente se perderán.

También me aseguré de que los archivos de los que git se quejó no se eliminaron Los copié en un archivo de texto y $ for i in $(cat ../test.txt); do ls -ahl $i; done el comando $ for i in $(cat ../test.txt); do ls -ahl $i; done $ for i in $(cat ../test.txt); do ls -ahl $i; done

Si realiza el proceso de pago en la sucursal mencionada anteriormente nuevamente, no olvide emitir el $ git status para asegurarse de que no aparezcan cambios no deseados.


eso es fácil de resolver, git está diciendo que tienes los mismos archivos en ambas ramas, por lo tanto, debes eliminar los archivos específicos de la rama maestra y luego podrás fusionar:

git fusionar "tu rama"

Espero que te funcione, acabo de resolver mi error. mi error fue:

error: los siguientes archivos del árbol de trabajo sin seguimiento se sobrescribirían mediante la combinación: .vs / slnx.sqlite Muévalos o elimínelos antes de combinarlos. Abortando

¡Ahora está funcionando! En mi caso .vs / slnx.sqlite fue generado por Visual Studio, necesitaba cerrarlo antes de eliminarlo.


Advertencia: Esto eliminará los archivos locales que no están indexados.

Solo fuerza: git checkout -f another-branch


Mover archivos, en lugar de eliminar

Una forma de evitar eliminar archivos es moverlos en su lugar. Por ejemplo:

cd "`git rev-parse --show-toplevel`" git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done