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.

245
demandé sur Zoe 2009-08-20 11:56:05

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. )
323
répondu VonC 2017-05-23 12:10:11

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
100
répondu Jamie Macey 2009-08-20 19:29:18

Eh bien, ça devrait être

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
55
répondu romerun 2009-10-11 08:48:17

Suivre,

$: git checkout -f

$: git checkout next_branch
13
répondu simplyharsh 2009-08-20 08:02:25

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 .

10
répondu ccliffe 2012-11-15 12:44:54

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.

7
répondu Greg Hewgill 2009-08-20 08:01:15

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
2
répondu vishnu viswanath 2018-04-24 16:05:04

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
1
répondu Jorge Avila 2018-03-01 22:41:37

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

1
répondu miguelacio 2018-03-12 19:24:01