web-dev-qa-db-fra.com

git: change de branche et ignore les modifications sans commettre

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.

286
Daniel Farrell

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:

  • caché votre changement actuel ou
  • reset --hard HEAD (si cela ne vous dérange pas de perdre ces modifications mineures) ou
  • checkout -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.)
364
VonC

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
114
Jamie Macey

eh bien, ça devrait être

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
59
romerun

Suivre,

$: git checkout -f

$: git checkout next_branch
16
simplyharsh

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.

14
ccliffe

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.

8
Greg Hewgill

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
6
vishnu viswanath

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
4
Jorge Avila

Fermez le terminal, supprimez le dossier où se trouve votre projet, puis clonez à nouveau votre projet et voilá.

2
miguelacio

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
2
Vinit Solanki

Déplacer les modifications non validées vers une nouvelle branche

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.

1
Tom Hale

Réponse facile:

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.


Vous avez décidé de garder les changements?

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

0
Kareem Jeiroudi