Entonces 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 trato de cambiar las ramas me sale 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 hago que esto funcione para poder cambiar de sucursal sin eliminar esos archivos?
Si hago un cambio, ¿afectará esos archivos? En otras palabras, si volviera a esta rama después, ¿todo sería perfecto hasta mi último compromiso?
No quiero perder esos archivos, simplemente no quiero rastrearlos.
Respuestas:
Parece que desea ignorar los archivos, pero ya se han confirmado. .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
. Esto--cached
evitará que tenga algún efecto en su copia de trabajo y se marcará como eliminado la próxima vez que confirme. Después de eliminar los archivos del repositorio, el .gitignore evitará que se vuelvan a agregar.Pero tiene otro problema con su .gitignore, está utilizando excesivamente comodines y está haciendo que coincida menos de lo que espera. En cambio, cambiemos el .gitignore e intentemos esto.
fuente
git rm --cached
no hará una diferencia, esos archivos no existen en la rama actual. Para este error, creo que el usuario debe seguir la respuesta de @Greg Hewgill: "sacarlos de la copia de trabajo, cambiar de rama y volver a moverlos".your files would be overwritten
confatal: pathspec 'test/node_modules' did not match any files
cuando lo hagagit rm -r --cache test/node_modules
? No puedo tirar por el mensaje sobrescrito y no puedo eliminarlo porque git no puede encontrarlos (están allí)ADVERTENCIA: eliminará los archivos no rastreados, por lo que no es una gran respuesta a la pregunta que se plantea.
Llegué a este mensaje también. En mi caso, no quería conservar los archivos, así que esto funcionó para mí:
git 2.11 y más reciente
git mayor
Si también desea eliminar archivos ignorados por git, ejecute el siguiente comando.
Ten cuidado !!! ESTO PROBABLEMENTE DESTRUYE SU PROYECTO, UTILICE SOLO SI SABE EL 100% DE LO QUE ESTÁ HACIENDO
git 2.11 y más reciente
git mayor
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 no rastreados además de archivos no rastreados.-f
se requiere para forzarlo a correr.fuente
git clean -dfxn
ogit clean -dfx --dry-run
-x
opción me dueleSolo forzarlo:
git checkout -f another-branch
fuente
error: pathspec 'mybranch' did not match any file(s) known to git.
Si está en OS X, puede deberse a que el nombre de un archivo ha cambiado el carácter de ciertos caracteres. Intente configurar la siguiente opción de configuración:
fuente
git rebase
también. Gracias.Git te dice que quiere crear archivos (con nombre,
public/system/images/9/...
etc.), pero que ya tienes archivos existentes en ese directorio que Git no rastrea. ¿Quizás alguien más agregó esos archivos al repositorio de Git, y esta es la primera vez que cambias a esa rama?Probablemente haya una razón por la cual esos archivos en su
develop
rama pero no en su rama actual. Puede que tenga que preguntar a sus colaboradores por qué es eso.No puede hacerlo sin hacer que los archivos desaparezcan de alguna manera. Se podría cambiar el nombre
public
demy_public
, o algo por el momento.Si confirma sus cambios, Git no los perderá. Si no confirma sus cambios, Git intentará realmente no sobrescribir el trabajo que ha realizado. Eso es lo que Git te advierte en primera instancia aquí (cuando intentaste cambiar de rama).
fuente
Esto funcionó para mí.
fuente
Hay un comando para esta delicada tarea (eliminar permanentemente archivos no rastreados)
Entonces
git pull
lo haré.fuente
Para aquellos que necesitan algo de menos alcance que la respuesta de Scott Schafer ,
probablemente funcionará. Yo altamente sugiero correr
primero. Ese comando generará una lista de archivos que Git eliminará si ejecuta
git clean -f
, y podría ahorrarle la molestia de eliminar inadvertidamente algo que no deseaba.Consulte esta respuesta de Stack Oveflow o los documentos para obtener más información
git clean
.fuente
Desafortunadamente, ni
git rm --cached
ogit clean -d -fx ""
lo hizo por mí.Mi solución terminó siendo empujar mi sucursal a control remoto, clonar un nuevo repositorio y luego fusionarme en el nuevo repositorio. Otras personas que accedieron al repositorio tuvieron que hacer lo mismo.
Moraleja de la historia: use un
.gitignore
archivo desde el inicio.fuente
Si desea resolver rápidamente esta pregunta, puede usar este comando:
fuente
.gitignore
afaik.Tuve el mismo problema al registrarme en una sucursal en función de una confirmación anterior. Git se negó a pagar debido a los archivos no rastreados.
He encontrado una solución y espero que te ayude también.
Agregar los directorios afectados
.gitignore
y emitirlos$ git rm -r --cached
aparentemente no es suficiente.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 no rastreados: edite
.gitignore
y aplique$ git rm -r --cached
en los archivos y directorios que desea que git ignore. Añadir también el archivo.gitignore
en sí a.gitignore
y no se olvide de tema$ git rm -r --cached .gitignore
. Esto asegurará que el comportamiento de ignorar de git deje lo mismo en los commits 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
Hard reset a la confirmación K
$ git reset --hard version_k
Crear una rama basada en el commit K
$ git branch commit_k_branch
Pagar en esa rama
$ git checkout commit_k_branch
Haz tus cosas y compromételas
Pago nuevamente en master nuevamente
$ git checkout master
Restablecer a la versión actual nuevamente
$ git reset current_version
o$ git reset ORIG_HEAD
Ahora puede restablecer duro a la CABEZA
git reset --hard HEAD
¡NOTA! No omita el penúltimo paso (p
$ git reset --hard ORIG_HEAD
. Ej ., Por ejemplo ), de lo contrario, los archivos no rastreados que git se quejó anteriormente se perderán.También me aseguré de que los archivos de los que se quejaba git no se eliminaran. Los copié en un archivo de texto y emití el comando
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Si vuelve a pagar en la sucursal mencionada anteriormente, no olvide emitir
$ git status
para asegurarse de que no aparezcan cambios no deseados.fuente
Esto me pasó en un Windows 8 , usando Git desde el símbolo del sistema. El resto de mi equipo usa TFS , y yo uso el git-tf de Microsoft para empujar / tirar entre TFS y mi repositorio local de Git.
El problema surgió debido a algunos archivos habían sido renombrados solo para cambiar su caso . Lo que parece haber sucedido fue esto:
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 esos archivos fueran agregados .git checkout
la última versión del proyecto, con la carcasa de archivo correcta.fuente
Estas dos funciones (git rm --cached, git checkout -f another-branch) NO me funcionaron.
En cambio, eliminé físicamente el archivo (en eclipse) como lo que Git te dice que hagas; Mueva o elimínelos antes de poder cambiar de rama.
y luego lo agrego / lo comprometo.
y luego tiré y funcionó!
fuente
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 pagar no la tenía, por eso git se quejaba de los archivos no rastreados y ninguna de las otras soluciones sugeridas me funcionó. Forcé el pago a mi nueva sucursal y saqué al maestro.git checkout -f my_branch
git pull origin master
git submodule update --init
fuente
En mi caso
git rm --cached
no funcionó. Pero lo tengo con ungit rebase
fuente
También estaba enfrentando un problema similar y probé todas las soluciones publicadas anteriormente, pero no funcionó
El problema se debía cuando cambió el nombre a mi
onMusicUpdateListener.java
aOnMusicUpdateListener.java
endevelop
rama.Ahora
master
teníaonMusicUpdateListener.java
ydevelop
tenía el mismo archivo queOnMusicUpdateListener.java
Ahora cada vez que cambié a maestro me dio un error
y entonces
aborted
.Para resolver esto, bifurco con fuerza
checked out
master
y luego le cambié el nombreonMusicUpdateListener.java
aOnMusicUpdateListener.java
,committed
it y luegomerged
condevelop
branch.Entonces i actualizado mi
develop
rama pormerging
enmaster
y ahora todo ha vuelto a la normalidad y problema está resuelto.fuente
Esto podría ser un problema de permiso,
cambiar la propiedad,
fuente
2 archivos con el mismo nombre pero diferente caso podría ser el problema.
Puede eliminar uno de estos archivos o cambiarle el nombre. Ex:
fuente
Mover archivos, en lugar de eliminar
Una forma de evitar eliminar archivos es moverlos en su lugar. Por ejemplo:
fuente
Si ha cambiado el nombre de un archivo localmente y luego hace un
pull
, mostrará ese mensaje de error.fuente
eso es fácil de resolver, git está diciendo que tiene los mismos archivos en ambas ramas, por lo tanto, debe eliminar los archivos específicos de la rama maestra y luego podrá fusionar:
git fusiona "tu rama"
Espero que funcione para ti, acabo de resolver mi error. mi error fue:
error: los siguientes archivos de árbol de trabajo no rastreados se sobrescribirán mediante la fusión: .vs / slnx.sqlite Mueva o elimínelos antes de fusionarlos. Abortar
¡Ahora está funcionando! En mi caso .vs / slnx.sqlite fue generado por Visual Studio, necesitaba cerrarlo antes de eliminarlo.
fuente
En mi caso, estaba viendo este error porque estoy usando un popular CMS de código abierto y el directorio que estaba causando problemas era el directorio de carga en el que escribe el CMS.
Entonces, lo que decía es que hay archivos que no tienes, pero que no puedes obtener de las versiones.
Estoy tomando todos los archivos del sitio en vivo a mi local, luego lo revisaré en el repositorio con la esperanza de que esto solucione el problema.
fuente
Elimine el archivo .gitignore de appname / gen / para resolver este problema.
fuente
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 por el estilo.
fuente
La mayoría de las respuestas consideran eliminar o eliminar los archivos, que es la manera fácil. Pero a veces no quieres deshacerte de los archivos locales. Pero fusionarse con una estrategia, por lo que git también tiene solución para esto;
fuente
Simplemente elimine los archivos o cámbieles el nombre.
p.ej
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 los renombre en lugar de eliminarlos, porque podría perder algunos cambios.
Si esto no ayuda, entonces debe eliminar toda la Rama y crearla nuevamente y luego hacer
git pull origin remotebranch
fuente
Para guardar los archivos modificados y usar el contenido modificado más adelante. Encontré este error al intentar verificar una rama y al intentar cambiar la base. Prueba Git stash
git stash
fuente
Compruebe si algún nombre de carpeta tiene '/' o algún símbolo especial y cambie el nombre de esas carpetas. Luego, simplemente clone el repositorio en otra ubicación.
fuente
Una solución simple podría ser: solo asegúrese de estar en el directorio de trabajo correcto
GitBash
. Ese mensaje aparece casi siempre si un usuario intenta fusionar un directorio demasiado alto en su jerarquía de carpetas.Ejemplo:
Escenario: el repositorio clonado por el usuario
git-folder
creó un nuevo proyecto Java en Eclipse e importó el repositorio clonado. Eclipse estableció myProjectSourceFolder como carpeta de origen en su proyecto local. por lo tanto, el Usuario lo ingresó en git bash y empujó, tiró y comprometió su proyecto desde allí. git se sincroniza por lo tantomyProjectSourceFolder
, pero no tiene registro en su historial para myBashSourceFolder. Por lo tanto, un push / pull / merge de myBashSourceFolder producirá el resultado dado, si el Usuario intenta sincronizar desde allí la próxima vez, en lugar de la carpeta que trabajó antes.fuente