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:
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.Confirma los cambios que acabas de hacer:
$ git add -A
$ git commit
Guarde el registro actual, de lo contrario puede tener problemas para volver a la versión actual
$ git log > ../git.log
Restablecimiento completo de la confirmación K
$ git reset --hard version_k
Crea una rama basada en el commit K
$ git branch commit_k_branch
Checkout en esa rama
$ git checkout commit_k_branch
Haz tus cosas y compromételo.
Salida de nuevo en el maestro de nuevo
$ git checkout master
Restablecer a la versión actual de nuevo
$ git reset current_version
o$ git reset ORIG_HEAD
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