Je travaillais sur une branche git et j'étais prêt à valider mes modifications. J'ai donc fait une validation avec un message de validation utile. Par la suite, j’ai distraitement apporté au code des modifications mineures qui ne valaient pas la peine d’être conservées. Je veux maintenant changer de branche, mais git me donne,
erreur: vous avez des modifications locales à "X"; ne peut pas 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 ignorer les changements mineurs sans m'engager et simplement changer de branche.
Vous avez besoin d'un état propre pour changer de branche. Le contrôle de la succursale ne sera autorisé que s’il n’affecte pas les "fichiers corrompus" (comme Charles Bailey remarque dans les commentaires).
Sinon, vous devriez soit:
reset --hard HEAD
(si cela ne vous dérange pas de perdre ces modifications mineures) oucheckout -f
(Lorsque vous changez de branche, continuez même si l'index ou l'arbre de travail diffère de HEAD. Ceci est utilisé pour supprimer les modifications locales.)Si vous souhaitez ignorer les modifications,
git checkout -- <file>
git checkout branch
Si vous voulez garder les changements,
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
Suivre,
$: git checkout -f
$: git checkout next_branch
Notez que si vous avez fusionné des branches distantes ou si vous avez des commits locaux et que vous souhaitez revenir au poste de travail distant HEAD, vous devez procéder comme suit:
git reset --hard Origin/HEAD
HEAD
seul fera référence à la validation/à la fusion locale. Plusieurs fois, j’ai oublié que, lors de la réinitialisation, vous vous retrouviez avec "votre référentiel correspond à X commet devant vous .." lorsque j’avais l’intention de décomposer TOUTES les modifications/validations et retourner à 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 annuler les modifications de travail, utilisez:
git reset --hard HEAD
Ensuite, vous pourrez changer de branche.
Aucune de ces réponses ne m'a aidé, car j'avais toujours des fichiers non suivis, même après la réinitialisation et la sauvegarde. Je devais faire:
git reset --hard HEAD
git clean -d -f
basculer vers une nouvelle branche en perdant les modifications:
git checkout -b YOUR_NEW_BRANCH_NAME --force
passer à une branche existante perdant 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á.
Si vous souhaitez conserver les modifications et modifier la branche en une seule ligne de commande
git stash && git checkout <branch_name> && git stash pop
J'ai créé un alias .gitconfig
pour cela:
[alias]
spcosp = !"git stash Push && git checkout \"$@\" && git stash pop --index #"
Pour changer en new-branch-name
, utilisez:
git spcosp new-branch-name
Et tous les changements de fichiers et d'index non validés seront conservés.
est de forcer la caisse d'une branche
git checkout -f <branch_name>
Forcer l'extraction d'une branche signifie à git d'abandonner toutes les modifications que vous avez apportées dans la branche actuelle et d'extraire celle de votre choix.
ou si vous consultez un commit
git checkout -f <commit-hash>
"Je pensais que je pourrais changer de branche sans m'engager. Si oui, comment puis-je configurer cela? Sinon, comment puis-je sortir de ce problème?"
La réponse à cette question est Non, c'est littéralement la philosophie de Git selon laquelle vous gardez une trace de tous les changements et que chaque nœud (c.-à-d. Commit) doit être à jour avec les derniers changements que vous avez effectués. Nous avons fait, à moins que vous ne fassiez un nouveau commit bien sûr.
Puis rangez-les en utilisant
git stash
et ensuite, pour libérer vos modifications dans la branche souhaitée, utilisez
git stash apply
qui appliquera vos modifications mais les conservera aussi dans la file d'attente. Si vous ne souhaitez pas les conserver dans la pile de réserve, faites-les apparaître à l'aide de
git stash pop
C'est l'équivalent de apply
et ensuite drop