J'ai donc ajouté un dossier à mon fichier .gitignore.
Une fois que je fais git status
ça, ça me dit
# On branch latest
nothing to commit (working directory clean)
Cependant, lorsque j'essaie de changer de branche, j'obtiens ce qui suit:
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
Voici à quoi ressemble mon fichier .gitignore:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Comment puis-je faire en sorte que je puisse changer de branche sans supprimer ces fichiers?
Si j'apporte une modification, cela affectera-t-il ces fichiers? En d'autres termes, si je revenais ensuite dans cette branche, tout serait parfait jusqu'à mon dernier commit?
Je ne veux pas perdre ces fichiers, je ne veux simplement pas qu'ils soient suivis.
Réponses:
Il semble que vous souhaitiez ignorer les fichiers, mais ils ont déjà été validés. .gitignore n'a aucun effet sur les fichiers qui sont déjà dans le référentiel, ils doivent donc être supprimés avec
git rm --cached
. Le--cached
empêcherai d'avoir un effet sur votre copie de travail et il marquera aussi supprimé la prochaine fois que vous vous engagez. Une fois les fichiers supprimés du référentiel, le .gitignore les empêchera d'être ajoutés à nouveau.Mais vous avez un autre problème avec votre .gitignore, vous utilisez excessivement les caractères génériques et cela le fait correspondre moins que vous ne le pensez. Au lieu de cela, changeons le .gitignore et essayez ceci.
la source
git rm --cached
ne fera aucune différence, ces fichiers n'existent pas dans la branche actuelle. Pour cette erreur, je pense que l'utilisateur doit plutôt suivre la réponse de @Greg Hewgill - "les retirer de la copie de travail, changer de branche et les reculer".your files would be overwritten
avecfatal: pathspec 'test/node_modules' did not match any files
quand je le faisgit rm -r --cache test/node_modules
? Je ne peux pas tirer à cause du message écrasé et je ne peux pas le supprimer parce que git ne peut pas les trouver (ils sont là)AVERTISSEMENT: il supprimera les fichiers non suivis, donc ce n'est pas une excellente réponse à la question posée.
J'ai également frappé ce message. Dans mon cas, je ne voulais pas conserver les fichiers, donc cela a fonctionné pour moi:
git 2.11 et plus récent
git plus âgé
Si vous souhaitez également supprimer les fichiers ignorés par git, exécutez la commande suivante.
ÊTRE AVERTI!!! CECI DÉTRUIT LE PLUS PROBABLEMENT VOTRE PROJET, UTILISEZ UNIQUEMENT SI VOUS SAVEZ À 100% CE QUE VOUS FAITES
git 2.11 et plus récent
git plus âgé
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
signifie que les fichiers ignorés sont également supprimés ainsi que les fichiers inconnus de git.-d
signifie supprimer les répertoires non suivis en plus des fichiers non suivis.-f
est nécessaire pour le forcer à s'exécuter.la source
git clean -dfxn
ougit clean -dfx --dry-run
-x
option me fait malIl suffit de le forcer:
git checkout -f another-branch
la source
error: pathspec 'mybranch' did not match any file(s) known to git.
Si vous êtes sous OS X, cela peut être dû au fait que le nom d'un fichier a changé la casse de certains caractères. Essayez de définir l'option de configuration suivante:
la source
git rebase
également. Merci.Git vous dit qu'il veut créer des fichiers (nommés
public/system/images/9/...
etc.), mais vous avez déjà des fichiers existants dans ce répertoire qui ne sont pas suivis par Git. Peut-être que quelqu'un d'autre a ajouté ces fichiers au référentiel Git, et c'est la première fois que vous passez à cette branche?Il y a probablement une raison pour laquelle ces fichiers dans votre
develop
branche mais pas dans votre branche actuelle. Vous devrez peut-être demander à vos collaborateurs pourquoi.Vous ne pouvez pas le faire sans faire disparaître les fichiers. Vous pouvez renommer
public
àmy_public
ou quelque chose pour l' instant.Si vous validez vos modifications, Git ne les perdra pas. Si vous ne validez pas vos modifications, Git fera de son mieux pour ne pas écraser le travail que vous avez fait. C'est ce que Git vous avertit dans le premier cas ici (lorsque vous avez essayé de changer de branche).
la source
Cela a fonctionné pour moi.
la source
Il existe une commande pour cette tâche délicate (suppression permanente des fichiers non suivis)
Alors
git pull
fera l'affaire.la source
Pour ceux qui ont besoin de quelque chose de moins profond que la réponse de Scott Schafer ,
fonctionnera probablement. Je suggère fortement de courir
première. Cette commande affichera une liste de fichiers que Git supprimera si vous exécutez
git clean -f
et pourrait vous éviter de supprimer par inadvertance quelque chose que vous ne vouliez pas.Voir cette réponse Stack Oveflow ou les documents pour plus d'informations
git clean
.la source
Malheureusement , ni
git rm --cached
ougit clean -d -fx ""
ne l'a fait pour moi.Ma solution a fini par pousser ma branche à distance, cloner un nouveau référentiel, puis faire ma fusion dans le nouveau référentiel. Les autres personnes accédant au dépôt devaient faire de même.
Morale de l'histoire: utilisez un
.gitignore
fichier depuis le début.la source
Si vous souhaitez résoudre rapidement cette question, vous pouvez utiliser cette commande:
la source
.gitignore
afaik.J'ai eu le même problème lors de la vérification dans une branche basée sur une validation antérieure. Git a refusé de payer en raison de fichiers non suivis.
J'ai trouvé une solution et j'espère qu'elle vous aidera aussi.
Ajout
.gitignore
et publication des répertoires concernés$ git rm -r --cached
ne sont apparemment pas suffisants.Supposons que vous souhaitiez créer une branche basée sur un commit K antérieur pour tester certaines choses et revenir à la version actuelle. Je le ferais dans les étapes suivantes:
Configurez les fichiers non suivis: éditez le
.gitignore
et appliquez$ git rm -r --cached
sur les fichiers et répertoires que vous voulez que le git ignore. Ajoutez également le fichier.gitignore
lui-même.gitignore
et n'oubliez pas de le publier$ git rm -r --cached .gitignore
. Cela garantira que le comportement ignorer de git reste le même dans les validations précédentes.Validez les modifications que vous venez d'apporter:
$ git add -A
$ git commit
Enregistrez le journal actuel, sinon vous risquez de rencontrer des problèmes pour revenir à la version actuelle
$ git log > ../git.log
Réinitialisation matérielle du commit K
$ git reset --hard version_k
Créer une branche basée sur le commit K
$ git branch commit_k_branch
Commander dans cette branche
$ git checkout commit_k_branch
Faites votre travail et engagez-le
Revenez dans Master
$ git checkout master
Rétablir à nouveau la version actuelle
$ git reset current_version
ou$ git reset ORIG_HEAD
Maintenant, vous pouvez réinitialiser dur à la tête
git reset --hard HEAD
REMARQUE! Ne sautez pas l'avant-dernière étape (comme par exemple
$ git reset --hard ORIG_HEAD
) sinon les fichiers non suivis git ci-dessus seront perdus.J'ai également vérifié que les fichiers dont se plaignait Git n'étaient pas supprimés. Je les ai copiés dans un fichier texte et j'ai lancé la commande
$ for i in $(cat ../test.txt); do ls -ahl $i; done
Si vous passez à nouveau à la succursale mentionnée ci-dessus, n'oubliez pas d'émettre
$ git status
pour vous assurer qu'aucun changement indésirable n'apparaît.la source
Cela m'est arrivé sur un système Windows 8 , en utilisant Git à partir de l'invite de commande. Le reste de mon équipe utilise TFS , et j'utilise git-tf de Microsoft de pour pousser / tirer entre TFS et mon référentiel Git local.
Le problème est survenu en raison de certains fichiers qui avaient été renommés uniquement pour changer leur cas . Ce qui semble s'être produit est le suivant:
git status
, je n'ai pu voir aucun changement, car dans l'invite de commande Windows, ces noms de fichiers sont équivalents.La solution la plus simple pour moi était:
git checkout
une version précédente du projet, bien avant que ces fichiers ne soient ajoutés .git checkout
la dernière version du projet, avec le boîtier de fichier correct.la source
Ces deux fonctions (git rm --cached, git checkout -f another-branch) ne fonctionnaient PAS pour moi.
Au lieu de cela, j'ai physiquement supprimé le fichier (dans éclipse) comme ce que Git vous dit de faire; Veuillez les déplacer ou les supprimer avant de pouvoir changer de branche.
puis je l'ajoute / je l'engage.
puis j'ai tiré et ça a marché!
la source
Dans mon cas, le problème était avec les sous-modules.
master
a été fusionné avec une autre branche qui a ajouté un nouveau sous-module au projet. La branche que j'essayais de vérifier ne l'avait pas, c'est pourquoi git se plaignait des fichiers non suivis et aucune des autres solutions suggérées ne fonctionnait pour moi. J'ai forcé le paiement à ma nouvelle succursale et j'ai retiré le maître.git checkout -f my_branch
git pull origin master
git submodule update --init
la source
Dans mon cas, cela
git rm --cached
n'a pas fonctionné. Mais je l'ai avec ungit rebase
la source
J'étais également confronté à un problème similaire et j'ai essayé toutes les solutions publiées ci-dessus mais cela n'a pas fonctionné
La question a été causé quand je renomme ma
onMusicUpdateListener.java
àOnMusicUpdateListener.java
endevelop
succursale.Maintenant
master
avaitonMusicUpdateListener.java
etdevelop
avait le même dossier queOnMusicUpdateListener.java
Maintenant, chaque fois que je suis passé au master, cela m'a donné une erreur
et ensuite
aborted
.Pour résoudre ce problème, je force
checked out
master
branche, puis renomme maonMusicUpdateListener.java
àOnMusicUpdateListener.java
,committed
et puismerged
avec ladevelop
branche.Ensuite, j'ai mis à jour ma
develop
branche enmerging
ellemaster
et maintenant tout est revenu à la normale et le problème est résolu.la source
Cela pourrait être un problème d'autorisation,
changer de propriétaire,
la source
2 fichiers avec le même nom mais un cas différent peuvent être le problème.
Vous pouvez en supprimer un sur ces fichiers ou le renommer. Ex:
la source
Déplacer des fichiers au lieu de les supprimer
Une façon d'éviter de supprimer des fichiers consiste à les déplacer à la place. Par exemple:
la source
Si vous avez renommé un fichier localement, puis effectuez une
pull
, il affichera ce message d'erreur.la source
c'est facile à résoudre, git dit que vous avez les mêmes fichiers dans les deux branches, donc vous devez supprimer les fichiers spécifiques de la branche principale et ensuite vous pourrez fusionner:
git merge "your branch"
J'espère que cela fonctionne pour vous, je viens de résoudre mon erreur. mon erreur était:
erreur: les fichiers d'arborescence de travail non suivis suivants seraient remplacés par la fusion: .vs / slnx.sqlite Veuillez les déplacer ou les supprimer avant de fusionner. Abandon
Maintenant ça marche! Dans mon cas .vs / slnx.sqlite a été généré par Visual Studio, je devais le fermer avant de le supprimer.
la source
Dans mon cas, je voyais cette erreur car j'utilise un CMS open source populaire et le répertoire qui causait des problèmes était le répertoire de téléchargement sur lequel le CMS écrit.
Donc, ce qu'il disait, c'est qu'il y a des fichiers que vous n'avez pas, mais que vous ne pouvez pas obtenir du versioning.
J'attrape tous les fichiers du site en direct sur mon site local, puis je vérifierai cela dans le référentiel dans l'espoir que cela résout le problème.
la source
Supprimez le fichier .gitignore de appname / gen / pour résoudre ce problème.
la source
Je suis simplement allé dans le système de fichiers et j'ai supprimé le fichier directement, puis j'ai continué avec git checkout et cela a fonctionné.
J'ai eu le problème plusieurs fois et il peut être lié aux développeurs qui suppriment, poussent, rajoutent, poussent ou quelque chose du genre.
la source
La plupart des réponses envisagent de supprimer ou de supprimer les fichiers, ce qui est le moyen le plus simple. Mais parfois, vous ne voulez pas vous débarrasser des fichiers locaux. Mais fusionnez avec une stratégie, donc git a aussi une solution pour cela;
la source
Supprimez simplement les fichiers ou renommez-les.
par exemple
Je devais renommer / supprimer ajax / product.php et ajax / produtPrice.php .
Ne vous inquiétez pas, git pull les ramènera. Je vous suggère de les renommer au lieu de les supprimer, car vous risquez de perdre certaines modifications.
Si cela ne vous aide pas, vous devez supprimer toute la branche et la créer à nouveau, puis faire
git pull origin remotebranch
la source
Afin d'enregistrer les fichiers modifiés et d'utiliser le contenu modifié ultérieurement. J'ai trouvé cette erreur pendant que j'essayais de vérifier une branche et lorsque j'essayais de rebaser. Essayez Git Stash
git stash
la source
Vérifiez si un nom de dossier contenant '/' ou un symbole spécial, puis renommez ces dossiers. Il vous suffit ensuite de cloner le référentiel vers un autre emplacement.
la source
Une solution simple pourrait être: assurez-vous simplement que vous êtes dans le bon répertoire de travail
GitBash
. Ce message apparaît presque chaque fois si un utilisateur essaie de fusionner un répertoire trop haut dans sa hiérarchie de dossiers.Exemple:
Scénario: l'utilisateur a cloné le référentiel en
git-folder
créant un nouveau projet Java dans Eclipse, a importé le référentiel cloné. Eclipse a défini myProjectSourceFolder comme dossier source dans son projet local. par conséquent, l'utilisateur l'a entré dans git bash et a poussé, tiré et validé son projet à partir de là. git se synchronise doncmyProjectSourceFolder
- mais n'a aucun enregistrement dans son historique pour myBashSourceFolder. Par conséquent, un push / pull / merge de myBashSourceFolder produira la sortie donnée, si l'utilisateur essaie de se synchroniser à partir de là la prochaine fois, au lieu du dossier qu'il a travaillé auparavant.la source