git: changer de branche et ignorer les modifications sans valider
Je travaillais sur une branche git et j'étais prêt à valider mes modifications, donc j'ai fait un commit avec un message de commit utile. J'ai ensuite fait des modifications mineures au code qui ne valent pas la peine d'être conservées. Je veux maintenant changer de branche, mais git me donne,
Erreur: vous avez des modifications locales à "X"; impossible de changer de branche.
Je pensais que je pouvais changer de branche sans m'engager. Si oui, comment puis-je configurer cela? Si non, comment puis-je sortir de ce problème? Je veux ignorez les modifications mineures sans valider et changez simplement les branches.
9 réponses
Vous avez besoin d'un état propre pour changer de branche. La commande de branche ne sera autorisée que si elle n'affecte pas les "fichiers sales" (comme les remarques de Charles Bailey dans les commentaires).
Sinon, vous devriez soit:
- cachette votre modification en cours ou
-
reset --hard HEAD
(si vous n'avez pas de perdre ces changements mineurs) ou -
checkout -f
(lorsque vous changez de branche, continuez même si L'index ou l'arbre de travail diffère de HEAD. Ce est utilisé pour jeter les changements locaux. )
Si vous voulez ignorer les modifications,
git checkout -- <file>
git checkout branch
Si vous voulez conserver les modifications,
git stash save
git checkout branch
git stash pop
Eh bien, ça devrait être
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
Notez que si vous avez fusionné des branches distantes ou que vous avez des commits locaux et que vous voulez revenir à la tête distante, vous devez faire:
git reset --hard origin/HEAD
HEAD
seul ne fera référence qu'au commit/merge local - plusieurs fois j'ai oublié que lors de la réinitialisation et de la fin avec "votre référentiel est X commits en avance.."quand j'avais entièrement l'intention de nuke tous les changements / commits et de revenir à la branche distante .
Si vous avez apporté des modifications aux fichiers que Git doit également modifier lors du changement de branche, cela ne vous le permettra pas. Pour supprimer les modifications de travail, Utilisez:
git reset --hard HEAD
Ensuite, vous pourrez changer de branche.
Aucune de ces réponses ne m'a aidé parce que j'avais encore des fichiers non suivis même après la réinitialisation et la cachette. Je devais faire:
git reset --hard HEAD
git clean -d -f
Passer à une nouvelle branche perdre des modifications:
git checkout -b YOUR_NEW_BRANCH_NAME --force
Passer à une branche existante perdre des modifications:
git checkout YOUR_BRANCH --force
Fermez le terminal, supprimez le dossier où se trouve votre projet, puis clonez à nouveau votre projet et voilá.