Insolubles Git erreur: La suite sans traces de travail de l'arborescence de fichiers serait écrasé par la caisse
Je suis en utilisant Git seul pour mon logiciel local de projet dans Visual Studio 2010. Récemment, j'ai créé une nouvelle branche pour faire un plus grand refactoring de l'une des fenêtres de dialogue. J'ai fait les modifications suivantes:
- Renommer Form1 pour Form1a (y compris tous les fichiers)
- Ajouter de nouveaux Form1
J'ai vérifié ce changement dans la branche, dire la forme-refactoring. Il est intéressant de noter, Git n'a pas remarqué que j'ai renommé le fichier Form1.cs dans Form1a.cs et a créé une nouvelle marque, totalement différent Form1.cs, mais au lieu de cela, il a remarqué une nouvelle Form1a.cs fichier et trouvé beaucoup de différences entre l'ancienne et la nouvelle Form1.cs fichiers. Ce sera bien sûr conduire à totalement garbaged des diffs, mais je n'aime pas dans ce cas, tant que tous les fichiers sont correctement pris en charge par la fin.
Puis je remis à maître de faire quelques autres petits changements. Rien contradictoires. Jusqu'à présent, tout a bien fonctionné.
Aujourd'hui, je voulais revenir à ma direction de la forme-refactoring pour poursuivre ce travail. Mais tout ce que j'obtiens est le suivant message:
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.
Ce qui est censé être? Le fichier n'est pas sans traces. Ni dans la branche master, ni dans la forme-refactoring de la branche. Il fait partie des deux branches, mais on n'est pas un descendant de l'autre. Qu'arriverait-il si je le supprimer, c'est parti pour de bon, alors? Je n'ai pas confiance Git pour ramener le de fichier correct si je supprime quelque chose maintenant. Je n'ai pas jouer avec n'importe quel fichier à l'extérieur de mon mentionné Git opérations, alors pourquoi devrais-je jouer avec n'importe quel fichier de continuer à utiliser Git opérations de maintenant? Git il le rompit, Git est censé s'occuper de ça maintenant!
Droit maintenant, je ne peux pas continuer avec mon travail parce que je ne peut pas passer les branches. Est-il une solution pour cela?
Git version 1.7.6, TortoiseGit est 1.7.3.
- Auriez-vous un modèle qui correspond à Form1.Le concepteur.cs dans votre .gitignore ou de tout autre ignorer les configurations?
- Ce fichier a une coche verte dans l'Explorateur et il a une histoire aussi bien. Je suppose qu'il n'est pas ignoré. Il existe également d'autres Forme.Le concepteur.cs fichiers dans mon projet qui ne cause pas de problèmes. Et ce n'est pas le premier dépôt Git que j'ai créé avec VS2010, jusqu'à aujourd'hui même un peu d'efforts dans la ramification a bien fonctionné.
- S'il vous plaît vérifiez que vous ignorez les filtres pour voir si ils ont changé pour que les pensions ou de la branche. Vous pouvez toujours voir l'état et de l'histoire sur un fichier s'il a été ajouté, avant de l'ignorer filtre. Tout ce qui utilise git status sera toujours le signaler (comme votre explorateur coches) Cela peut provoquer l'erreur, vous êtes en indiquant si vraiment il y a des changements dans le fichier parce que Git ignore désormais que lors de l'exécution de la commande Git status. Cependant Git va encore connaître ça a changé quand essayer de faire un checkout et vous donner cette erreur.
- Un Double contrôle. Aucun problème trouvé. J'ai trouvé une solution de contournement hack pour l'instant d'accéder à mes données. J'ai cloné le dépôt dans un autre répertoire, puis passer à la succursale de l'il (elle a effectivement travaillé) et utilisé BeyondCompare manuellement(!) commutateur de mon repo et le répertoire de travail par la copie de certains (pas tous) des fichiers .git et toutes les différences dans le répertoire de travail. Jusqu'à maintenant, git status œuvres raisonnable dans ma version piratée... - (Juste au cas où vous êtes inquiet: j'ai fait une sauvegarde de tout cela avant d'essayer quelque astuce à partir de cette page.)
Vous devez vous connecter pour publier un commentaire.
Le cœur.ignorecase option de configuration n'a pas été définie et Visual Studio avait renommé le .Le concepteur.cs fichier en cas, de commutation à partir d'un capital à la baisse "D" (ou vice versa). C'était le problème à la fin. Il m'a fallu un peu de l'historique des fichiers de la débâcle (suppression et re-ajout de fichiers) pour résoudre cette erreur après le réglage de l'option à true. En fait l'option a été réglée sur un ordinateur, mais lorsque vous clonez le dépôt, l'établissement s'est perdu en quelque sorte. Et puis le destin a été en attente pour VS de renommer ce fichier pour m'attraper.
Donc sur Windows, vous devez toujours vous assurer que ces deux paramètres sont corrects après tout init/opération de duplication:
Certains outils (TGit, gitscc etc.) ne semblent pas faire de ce droit. Il est absolument nécessaire pour le fonctionnement normal sur Windows, mais Git n'a pas de soins si elles ne sont pas correctement définies et de la juste permet de trébucher pas vous dire pourquoi. C'est un mensonge que c'est utile dans cette affaire.
Git ne permet pas de basculer branches si il y a une possibilité de perdre des données.
Il est généralement une bonne idée d'engager toutes vos modifications avant de passer à une autre branche.
Si vous êtes absolument sûr que vous n'avez pas fait ce changement que vous pouvez réinitialiser votre arbre de travail à l'aide de
de commande. Mais j'ai fortement de ne pas recommander de le faire. Utilisation
de commande pour ranger vos changements de stockage interne. Dans ce cas, vous pouvez toujours récupérer vos données.
Tout d'abord, Git n'est pas de vous mentir. Le fichier est enregistrée dans la branche, et existe vraiment dans le travail de l'arbre, et est vraiment sans traces.
Étant donné que vous en proposer dans les commentaires d'ailleurs, que les fichiers ne s'affichent pas dans les diffs ou même
git status
, il semble que vous l'avez ajouté à votre gitignore (peut-être involontairement, par l'intermédiaire d'un modèle générique). Je sais que vous avez dit que vous n'avez pas le cas, mais si ce n'est pas dans la sortie degit status
comme un sans traces de fichier, alors il est sans traces et ignoré. Pour vérifier cela, vous pouvez lister tous les fichiers ignorés par .gitignore:Vous pouvez également la liste de tous les sans traces de fichiers, ignoré ou pas:
(Vous semblez dire que vous êtes très sûr que le fichier est suivi - si c'était vraiment,
git show HEAD:path/to/file
serait montrer le contenu du fichier. Je soupçonne, cependant, que cela va plutôt dire "fatal: Chemin d'accès 'chemin/vers/fichier' n'existe pas dans la "TÊTE"".)Un autre moyen de vérifier que le fichier est sans traces et ignoré, c'est tout simplement le renommer, puis voir si
git status
rapports, il est supprimé; si elle ne le fait pas, il n'était pas suivi.En supposant que ce ne liste le fichier en question, vous devez examiner le fichier dans votre dossier de travail de l'arbre. Vous pouvez voir quelle est la version du fichier que l'autre branche a l'aide de
git show other-branch:path/to/file
, de les comparer. Si vous êtes convaincu que vous n'avez pas besoin de la version de votre travail à l'arbre, il suffit de le supprimer. Si vous êtes inquiet que vous pourriez avoir besoin d'elle, de le renommer ou de le déplacer hors de l'annuaire. Si vous vous rendez compte que vous n'en avez pas besoin, vous devriez comprendre ce qu'ignorer le motif est de l'ignorer, de le supprimer, ajouter, et de le valider. Dans tous les cas, une fois que vous avez traité avec le fichier, vous serez en mesure de passer les branches.Cela a résolu le problème pour moi:
Il semble que XXX branche (forme-refactoring) contient ce fichier, mais YYY ne l'est pas. Et maintenant vous essayez de déplacer de branche YYY XXX. Git est peur que vous oubliez juste pour ajouter un fichier de sorte qu'il ne débite pas permettre de passer à une autre branche.
Utilisation
pour déterminer si ce fichier (Form1.Le concepteur.cs) est sans traces. Dans ce cas il suffit de le valider et ensuite vous pouvez passer à une autre branche de la