Quand je fais git status
ça dit nothing to commit, working directory clean
Et puis je fais git pull --rebase
, ça dit:
First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD
Erreur similaire en faisant git pull Origin master
* branch master -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can merge.
Aborting
Ma .gitignore
fichier:
→ cat .gitignore
.htaccess
bower_components/
Ce fichier revient constamment et quand je le supprime du système de fichiers, git dira que j'ai supprimé ce fichier, tandis que dans les autres messages, il dit qu'il n'est pas suivi. Comment pourrait-il être non suivi et suivi en même temps?
Sans une image complète du dépôt, ce qui suit est plus une supposition qu'autre chose, mais cela pourrait expliquer la situation. Supposons que votre historique se présente comme suit:
A -- C [Origin/master]
\
B [HEAD, master]
Vous écrivez:
Ce fichier revient constamment et quand je le supprime du système de fichiers, git dira que j'ai supprimé ce fichier, tandis que dans les autres messages, il dit qu'il n'est pas suivi.
Je suppose que tu as peut-être couru
git rm --cached <file-in-question>
et validé cette suppression dans commit B
; par conséquent, le fichier n'est plus suivi dans votre référentiel local et mais il est toujours présent dans votre arborescence de travail.
En attendant, la branche en amont a reçu la validation C
d'un de vos collaborateurs, dans laquelle <file-in-question>
n'était pas supprimé du contrôle de version. Ce que vous essayez d'effectuer avec
git pull --rebase
est quelque chose comme ça:
A -- C [Origin/master]
\
B' [HEAD, master]
Cependant, comme le dit le message,
L'arbre de travail [fichier] non suivi [...] serait écrasé par la caisse
En effet, le rembobinage de commit C
(afin de rejouer B
par dessus) entraînerait la révision de <file-in-question>
(de commit C
) à extraire dans votre arborescence de travail, dans laquelle existe déjà un fichier non suivi du même nom. Le contenu de ce fichier non suivi peut être précieux; il se peut que vous ne souhaitiez pas que ce fichier soit remplacé par une autre version de celui-ci. Par conséquent, Git s'arrête et vous indique ce qui ne va pas.
Edit: Voici un exemple de bébé qui reproduit la situation ...
cd ~/Desktop
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "add README"
# simulate a remote branch moving ahead by one commit
# (that doesn't remove the README)
git checkout -b Origin_master
printf "This is a README.\n" > README.md
git add README.md
git commit -m "add description in README"
# remove the README and create a new commit on master
git checkout master
git rm --cached README.md
git commit -m "remove README"
# simulate an attempt to rebase master to its "upstream" branch, Origin_master
git rebase --onto Origin_master master
Cette dernière commande crache ce qui suit:
First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
README.md
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD
Je vous suggère de courir
git fetch
git log --stat Origin/master..master -- <file-in-question>
pour vérifier si quelque chose comme ça s'est produit.
Cela peut également se produire en raison d'un changement de casse sur le nom de fichier. J'ai eu le même problème et c'est ce qui l'a résolu pour moi.
git config core.ignorecase true
Vrai pour Mac ou PC.
Solutions alternatives à: Les fichiers d'arborescence de travail non suivis suivants seraient écrasés par la caisse
Supprimer tous les fichiers non suivis (attention):
git clean -d -fx ""