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. J'ai ensuite, par distraction, apporté 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 sur "X"; ne peut pas changer de branche.
Puis-je changer de succursale sans m'engager? Si oui, comment puis-je configurer cela? Sinon, comment puis-je sortir de ce problème? Je veux ignorer les changements mineurs sans commettre et simplement changer de branche.
git
branch
git-checkout
Daniel Farrell
la source
la source
error: You have local changes to '<filename>'; cannot switch branches.
et la branche ne changera pas. vous pouvez fairegit checkout -m <branch-name>
pour fusionner les conflits et passer à la succursale et résoudre les conflits vous-même, ougit checkout -f <branch-name>
pour ignorer les modifications.Réponses:
Vous avez besoin d'un état propre pour changer de branche. Le paiement en succursale ne sera autorisé que s'il n'affecte pas les «fichiers sales» (comme le remarque Charles Bailey dans les commentaires).
Sinon, vous devez 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'arborescence de travail diffère de HEAD. Ceci est utilisé pour supprimer les modifications locales.)Ou, plus récemment:
git switch
:git switch -f <branch-name>
(
-f
est l'abréviation de--force
, qui est un alias pour--discard-changes
)Cela diffère de
git switch -m <branch-name>
ce qui déclenche une fusion à trois voies entre la branche actuelle, le contenu de votre arborescence de travail et la nouvelle branche est terminée: vous ne perdrez pas votre travail en cours de cette façon.la source
Si vous souhaitez annuler les modifications,
Si vous souhaitez conserver les modifications,
la source
git stash save
(quand dans la branche de travail Y) alorsgit checkout branchX
faites quelque chosegit add/commit -m
etc.git checkout branchY
etgit stash pop
récupérez la cachettegit stash save
est désormais déprécié au profit degit stash push
eh bien, ça devrait être
la source
git stash
sera par défautgit stash save
Suivre,
la source
Notez que si vous avez fusionné des branches distantes ou avez des validations locales et que vous souhaitez revenir au HEAD distant, vous devez faire:
HEAD
seul ne fera référence qu'à la validation / fusion locale - à plusieurs reprises, j'ai oublié que lors de la réinitialisation et que vous vous retrouvez avec "votre référentiel est X s'engage à venir .." lorsque j'avais l'intention de supprimer TOUTES les modifications / validations et de retourner à la branche distante .la source
Si vous avez apporté des modifications aux fichiers que Git doit également changer lors du changement de branche, il ne vous le permettra pas. Pour ignorer les modifications de travail, utilisez:
Ensuite, vous pourrez changer de branche.
la source
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:
la source
passer à une nouvelle succursale en perdant les modifications:
passer à une branche existante en perdant les modifications:
la source
Réponse facile:
est de forcer le paiement d'une branche
Forcer l'extraction d'une branche indique à git de supprimer toutes les modifications que vous avez apportées à la branche actuelle et de retirer celle souhaitée.
ou au cas où vous vérifieriez un commit
La réponse à cette question est non , c'est littéralement la philosophie de Git que vous gardez une trace de toutes les modifications et que chaque nœud (c'est-à-dire commit) doit être à jour avec les dernières modifications que vous avez apportées, sauf si vous avez fait un nouveau commit bien sûr.
Vous avez décidé de garder les changements?
Ensuite, rangez-les en utilisant
puis pour libérer vos modifications dans la branche souhaitée, utilisez
qui vous appliquera les modifications mais les conservera également dans la file d'attente. Si vous ne souhaitez pas les conserver dans la pile de stockage, faites-les apparaître à l'aide de
C'est l'équivalent de
apply
puisdrop
la source
Fermez le terminal, supprimez le dossier où se trouve votre projet, puis clonez à nouveau votre projet et voilá.
la source
reset --hard
!Si vous souhaitez conserver les modifications et modifier la branche dans une seule ligne de commande
la source
Déplacer les modifications non validées vers une nouvelle branche
J'ai créé un
.gitconfig
alias pour cela:Pour passer à
new-branch-name
, utilisez:Et tous les changements de fichier et d'index non validés seront conservés.
la source
git checkout -f your_branch_name
si vous rencontrez des problèmes pour annuler les modifications:
si vous souhaitez supprimer les répertoires et fichiers non suivis:
la source
Pour passer à une autre branche sans valider les modifications lorsque git stash ne fonctionne pas. Vous pouvez utiliser la commande ci-dessous:
git checkout -f nom-de-branche
la source