Error de Git no resuelto: los siguientes files de tree de trabajo sin seguimiento se sobrescribirán con el pago y envío

Estoy usando Git solo para mi proyecto de software local en Visual Studio 2010. Recientemente, creé una nueva twig para hacer una refacturación más grande de una de las windows de dialog. Hice las siguientes modificaciones:

  • Cambie el nombre de Form1 a Form1a (incluidos todos los files dependientes)
  • Agregar nuevo Form1

Revisé este cambio en la twig, digamos refactorización de formularios. Curiosamente, Git no se dio count de que renombré el file Form1.cs en Form1a.cs y creé un Form1.cs totalmente nuevo y totalmente diferente, pero noté un nuevo file Form1a.cs y encontré muchas diferencias entre los files Form1.cs anteriores y nuevos. Esto conducirá, por supuesto, a diffs totalmente guarnecidos, pero no me importa en este caso, siempre y cuando todos los files se manejen correctamente al final.

Luego volví a Master para hacer algunos otros pequeños cambios. Nada en conflicto. Hasta ahora, todo funcionó bien.

Hoy, quería volver a la forma de refactorización de mi sucursal para continuar ese trabajo. Pero todo lo que obtengo es el siguiente post:

git.exe checkout form-refactoring Aborting error: The following untracked working tree files would be overwritten by checkout: Form1.Designer.cs Please move or remove them before you can switch branches. 

¿Qué se supone que es? El file mencionado no está sin seguimiento. Ni en la twig principal, ni en la twig de refactorización de formularios. Es parte de ambas twigs, pero una no es descendiente de la otra. ¿Qué pasaría si lo borro, se ha ido para siempre? No confío en que Git me devuelva el file correcto si borro algo ahora. No jugué con ningún file fuera de las operaciones mencionadas de Git, entonces ¿por qué debería jugar con cualquier file para continuar usando las operaciones de Git ahora? ¡Git lo rompió, se supone que Git debe manejarlo ahora!

En este momento, no puedo continuar con mi trabajo porque no puedo cambiar de twig. ¿Hay una solución fácil para esto?

La versión de Git es 1.7.6, TortoiseGit es 1.7.3.

La opción de configuration core.ignorecase no se configuró y Visual Studio cambió el nombre del file .Designer.cs en el caso, al pasar de un capital a una "D" más baja (o viceversa). Ese fue el problema al final. Me tomó un poco de separación de historial de files (eliminar y volver a agregar files) para resolver este error después de establecer la opción en verdadero. En realidad, la opción se estableció en una computadora, pero al clonar el repository, la configuration se perdió de alguna manera. Y luego el destino solo estaba esperando que VS cambiara el nombre de ese file para atraparme.

Por lo tanto, en Windows, siempre debe asegurarse de que estas dos configuraciones sean correctas después de cualquier operación de initialization / clonación:

 git config core.ignorecase true git config core.autocrlf false 

Algunas herramientas (TGit, gitscc, etc.) no parecen hacerlo bien. Es absolutamente necesario para una operación normal en Windows, pero a Git no le importa si no están configurados correctamente y simplemente le permite tropezar con ellos sin decirle por qué. Es tanto mentir como útil en este asunto.

Git no permite cambiar de twig si existe la posibilidad de que se pierdan datos.

En general, es una buena idea realizar todos los cambios antes de cambiar a otra twig. Si está absolutamente seguro de que no realizó este cambio, puede restablecer su tree de trabajo utilizando

 git reset --hard HEAD 

mando. Pero no recomiendo hacer esto. Utilizar

 git stash 

command para ocultar sus cambios en el almacenamiento interno. En este caso, siempre puedes recuperar tus datos.

Parece que la twig XXX (refactorización de formulario) contiene este file pero YYY no. Y ahora estás tratando de pasar de la twig YYY a XXX. Git teme que te olvides de agregar el file para que no se pueda mover a otra.

Utilizar

 git status 

para determinar si este file (Form1.Designer.cs) no se ha rastreado. En este caso, solo confírmalo y luego podrás moverte de forma segura a otra twig

Antes que nada, Git no te está mintiendo . El file realmente se rastrea en la twig, y ​​realmente existe en el tree de trabajo, y realmente no se rastrea.

Dado que sugieres en otros comentarios que el file no aparece en diffs o incluso en git status , parece que lo has agregado a tu gitignore (quizás de forma involuntaria mediante un patrón de comodín). Sé que dijiste que no, pero si no aparece en el resultado del git status de git status como un file sin seguimiento, entonces no se rastrea ni se ignora. Para verificar esto, puede hacer una list de todos los files ignorados por .gitignore:

 git ls-files -i --exclude-from=.gitignore 

También puede enumerar todos los files sin seguimiento, ignorados o no:

 git clean -xdn 

(Parece que dices que estás muy seguro de que el file está rastreado, si realmente lo fuera, git show HEAD:path/to/file mostraría el contenido del file. Sin embargo, sospecho que eso en cambio lo dirá ". fatal: la ruta 'path / to / file' no existe en 'HEAD' ").

Otra forma de verificar que el file no se haya rastreado e ignorado es simplemente cambiarle el nombre, luego ver si el git status informa como eliminado; si no lo hace, no fue rastreado.

Suponiendo que esto no enumera el file en cuestión, debe examinar el file en su tree de trabajo. Puede ver qué versión del file tiene la otra sucursal usando git show other-branch:path/to/file , para comparar. Si está satisfecho de que no necesita la versión en su tree de trabajo, simplemente quítela. Si le preocupa que pueda necesitarlo, cámbiele el nombre o muévalo fuera del directory. Si se da count de que lo necesita, debe averiguar qué patrón ignorar lo está ignorando, eliminarlo, agregarlo y comprometerlo. En cualquier caso, una vez que haya tratado el file, podrá cambiar de sucursales.

Esto resolvió el problema para mí rm .git / fs_cache