J'ai donc ajouté un dossier à mon fichier .gitignore.
Une fois que je fais un git status
il me dit
# On branch latest
nothing to commit (working directory clean)
Cependant, lorsque j'essaie de changer de branche, je reçois 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 dans cette branche par la suite, tout serait-il parfait jusqu'à mon dernier commit?
Je ne veux pas perdre ces fichiers, je ne veux tout simplement pas qu'ils soient suivis.
Il semble que vous souhaitiez que les fichiers soient ignorés, mais ils ont déjà été validés. .gitignore n’a aucun effet sur les fichiers déjà présents dans le référentiel, il est donc nécessaire de les supprimer avec git rm --cached
. Le --cached
l'empêchera d'avoir un effet sur votre copie de travail et sera simplement marqué comme supprimé lors de votre prochaine validation. Une fois les fichiers supprimés du référentiel, le .gitignore empêchera leur ajout.
Mais vous avez un autre problème avec votre .gitignore, vous utilisez excessivement des caractères génériques et cela le fait correspondre moins bien que prévu. Au lieu de cela, changeons le .gitignore et essayons ceci.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Je frappe aussi ce message. Dans mon cas, je ne voulais pas conserver les fichiers, donc cela a fonctionné pour moi:
git clean -d -f .
git clean -d -f ""
Si vous souhaitez également supprimer les fichiers ignorés par git, exécutez la commande suivante.
git clean -d -fx .
git clean -d -fx ""
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 requis pour le forcer à s'exécuter.
Attention: Ceci supprimera les fichiers locaux non indexés
Il suffit de le forcer: git checkout -f another-branch
Si vous utilisez OS X, c'est peut-être parce que le nom d'un fichier a vu certains caractères changer de casse. Essayez de définir l’option de configuration suivante:
git config core.ignorecase true
Git vous dit qu'il veut créer des fichiers (nommé public/system/images/9/...
etc.), mais vous avez déjà des fichiers existants dans ce répertoire que are - suivis par Git. Peut-être que quelqu'un d'autre a ajouté ces fichiers au référentiel Git, et que c'est la première fois que vous passez à cette branche?
Il y a probablement une raison pour laquelle ces fichiers se trouvent dans votre branche develop
mais pas dans votre branche actuelle. Vous devrez peut-être demander à vos collaborateurs pourquoi.
comment puis-je faire en sorte que je puisse changer de branche sans supprimer ces fichiers?
Vous ne pouvez pas le faire sans faire disparaître les fichiers. Vous pouvez renommer public
en my_public
ou quelque chose pour le moment.
si je revenais dans cette branche par la suite, tout serait-il parfait jusqu'à mon dernier engagement?
Si vous validez vos modifications, Git ne les perdra pas. Si vous ne validez pas vos modifications, alors Git essaiera très fort pas de remplacer le travail que vous avez effectué. C'est ce dont Git vous avertit au début (lorsque vous avez essayé de changer de branche).
Il existe une commande pour cette tâche délicate (suppression permanente des fichiers non suivis)
git clean -i
Alors git pull
fera l'affaire.
Cela a fonctionné pour moi.
1. git fetch --all
2. git reset --hard Origin/{branch_name}
Malheureusement, ni git rm --cached
ni git clean -d -fx ""
ne l’ont fait pour moi.
Ma solution a finalement consisté à pousser ma branche vers la télécommande, à cloner un nouveau référentiel, puis à fusionner le nouveau référentiel. Les autres personnes accédant à la pension devaient faire la même chose.
Morale de l'histoire: utilisez un fichier .gitignore
depuis le début.
Pour ceux qui ont besoin de quelque chose de moins ambitieux que la réponse de Scott Schafer ,
git clean -f
va probablement travailler. Je fortement suggère de courir
git clean --dry-run
premier. Cette commande affichera une liste de fichiers que Git supprimera si vous exécutez git clean -f
, et vous épargnera peut-être la peine de supprimer par inadvertance quelque chose que vous ne voudriez pas.
Voir cette réponse Stack Oveflow ou la documentation pour plus d'informations sur git clean
.
Si vous voulez résoudre rapidement cette question, vous pouvez utiliser cette commande:
git checkout -f dev
Cela m'est arrivé sur un système Windows 8 , en utilisant Git à partir de la commande Invite. Le reste de mon équipe utiliseTFS, et j'utilise le git-tf de Microsoft pour Push/Pull entre TFS et mon référentiel Git local.
Le problème est dû à certains fichiers qui ont été renommés uniquement pour changer leur cas . Ce qui semble être arrivé est le suivant:
git status
, je n’ai pu voir aucun changement, car dans la commande Windows, Invite, 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 l’ajout de ces fichiers .git checkout
la dernière version du projet, avec le fichier d’archivage correct.J'ai eu le même problème lors de la vérification d'une branche basée sur un commit précédent. Git a refusé de passer à la caisse à cause de fichiers non suivis.
J'ai trouvé une solution et j'espère que cela vous aidera aussi.
Ajouter les répertoires affectés à .gitignore
et leur donner $ git rm -r --cached
n'est apparemment pas suffisant.
Supposons que vous souhaitiez créer une branche basée sur un commit K antérieur afin de tester des éléments et de 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
aux fichiers et répertoires que vous voulez que le git ignore. Ajoutez également le fichier .gitignore
lui-même à .gitignore
et n'oubliez pas d'émettre $ git rm -r --cached .gitignore
. Cela garantira que le comportement ignorer de git laisse la même chose dans les premiers commits.
Validez les modifications que vous venez de faire:
$ git add -A
$ git commit
Enregistrez le journal actuel, sinon vous pourriez avoir des problèmes pour revenir à la version actuelle.
$ git log > ../git.log
Réinitialisation matérielle à la validation 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
Fais tes affaires et commets-les
Revenez dans Master encore
$ git checkout master
Réinitialiser à 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 réclamés ci-dessus seront perdus.
Je me suis également assuré que les fichiers dont git se plaint n'étaient pas supprimés. Je les ai copiées dans un fichier texte et ai lancé la commande $ for i in $(cat ../test.txt); do ls -ahl $i; done
Si vous passez à la succursale mentionnée ci-dessus, n'oubliez pas de publier $ git status
pour vous assurer qu'aucune modification indésirable n'apparaîtra.
Dans mon cas, le problème était avec les sous-modules. master
a été fusionné avec une autre branche, ce 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 qu'aucune des solutions suggérées ne fonctionnait pour moi. J'ai forcé la caisse à ma nouvelle succursale et ai tiré le maître.
git checkout -f my_branch
git pull Origin master
git submodule update --init
Ces deux fonctions (git rm --cached, Git checkout -f une autre branche) ne fonctionnaient PAS pour moi.
Au lieu de cela, j'ai physiquement supprimé le fichier (dans Eclipse) comme ce que Git vous avait demandé de faire; S'il vous plaît déplacer ou les supprimer avant de pouvoir changer de branche.
et puis j'ajoute/commis.
et puis j'ai tiré et cela a fonctionné!
J'étais également confronté à un problème similaire et j'ai essayé toutes les solutions affichées ci-dessus, mais cela n'a pas fonctionné
Le problème était dû au fait que je ai renommé mon onMusicUpdateListener.Java
en OnMusicUpdateListener.Java
dans la branche develop
.
Maintenant, master
avait onMusicUpdateListener.Java
Et develop
avait le même fichier que OnMusicUpdateListener.Java
Maintenant, chaque fois que je passais à maîtriser cela me donnait une erreur
The following untracked working tree files would be overwritten by checkout
et puis il aborted
.
Afin de résoudre ce problème, je force de force checked out
master
branch Puis je renomme mon onMusicUpdateListener.Java
en OnMusicUpdateListener.Java
, committed
le, puis merged
le avec develop
branche.
Ensuite, j'ai mis à jour ma branche develop
de merging
dans master
et maintenant tout est revenu à la normale et le problème a été résolu.
Déplacer des fichiers au lieu de supprimer
Une façon d'éviter de supprimer des fichiers consiste à les déplacer à la place. Par exemple:
cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
Cela pourrait être un problème de permission,
changer la propriété,
Sudo chown -v -R usr-name:group-name folder-name
Dans mon cas, git rm --cached
n'a pas fonctionné . Mais je l'ai eu avec un git rebase
Le problème concerne 2 fichiers portant le même nom mais avec un cas différent.
Vous pouvez en supprimer un sur ces fichiers ou le renommer. Ex:
Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)
Si vous avez renommé un fichier localement, puis effectuez une pull
, ce message d'erreur s'affichera.
c'est facile à résoudre, git dit que vous avez les mêmes fichiers dans les deux branches, vous devez donc supprimer les fichiers spécifiques de la branche maître et ensuite vous pourrez fusionner:
git fusionner "votre branche"
J'espère que cela fonctionne pour vous, je viens de résoudre mon erreur ..__ mon erreur était:
erreur: les fichiers d’arbre de travail non suivis suivants seraient écrasés par la fusion: .vs/slnx.sqlite S'il vous plaît déplacez ou supprimez-les avant de fusionner . Abandonner
Maintenant, ça marche! Dans mon cas, le fichier .vs/slnx.sqlite a été généré par Visual Studio, je devais le fermer avant de le supprimer.
La plupart des réponses envisagent de supprimer ou de supprimer les fichiers, ce qui est facile. Mais parfois, vous ne voulez pas vous débarrasser des fichiers locaux. Mais fusionner avec une stratégie, git a donc une solution à cela aussi;
git merge --strategy=ours master
Dans mon cas, je voyais cette erreur parce que j'utilisais un CMS populaire open source et que le répertoire qui posait problème était le répertoire de téléchargement dans lequel le CMS écrit.
Donc, ce qu'il disait, c'est qu'il existe des fichiers que vous n'avez pas, mais que vous ne pouvez pas obtenir du versioning.
J'attrape tous les fichiers du site actif sur mon local, puis je l'examinerai dans le référentiel dans l'espoir que cela résoudra le problème.
Vérifiez si un nom de dossier avec '/' ou un symbole spécial est renommé, puis renommez-le. Ensuite, il vous suffit de cloner le référentiel vers un autre emplacement.
Supprimez simplement les fichiers ou renommez-les.
par exemple.
$ 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
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 alors supprimer toute la branche, la créer à nouveau et ensuite faire git pull Origin remotebranch
Supprimez .gitignore fichier de appname/gen/pour résoudre ce problème.
Afin de sauvegarder les fichiers modifiés et d’utiliser le contenu modifié plus tard ... J'ai trouvé cette erreur alors que j'essayais de vérifier une branche et d’essayer de rebaser.
git stash
Je suis juste allé dans le système de fichiers et ai supprimé le fichier directement, puis j'ai continué avec git checkout et cela a fonctionné.
Le problème est survenu plusieurs fois et peut être lié au fait que des développeurs suppriment, Push, rajoutent, Push ou quelque chose du genre.