web-dev-qa-db-fra.com

Erreur lors du passage à la branche principale: mes modifications locales seraient écrasées par la commande.

_ {Cette question est similaire à celle-ci , mais plus spécifique.} _

J'ai un projet avec deux branches (staging et beta). 

Je développe sur staging et utilise la branche master pour corriger les bogues. Donc si je travaille sur la mise en scène et que je vois une erreur, je passe à la branche master:

git checkout master

et faire le truc:

git add fileToAdd
git commit -m "bug fixed"

et puis je fusionne avec les deux branches:

git checkout staging
git merge master
git checkout beta
git merge beta

Et peu importe s'il y a d'autres fichiers sur l'arbre de travail.

Mais maintenant, lorsque j'essaie de passer à la branche master, j'obtiens une erreur:

error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting

J'ai pensé que je devrais supprimer le fichier de la zone de stockage intermédiaire:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php

mais je reçois la même erreur. Si je fais git status je reçois No changes to commit

84
Manolo

Votre erreur apparaît lorsque vous avez modifié un fichier et que la branche sur laquelle vous passez a également été modifiée pour ce fichier (à partir du dernier point de fusion).

Selon moi, vos options sont les suivantes: - commit, puis modifier ce commit avec des modifications supplémentaires (vous pouvez modifier les commits dans git, tant qu'ils ne sont pas Pushed); ou - utilisez stash:

git stash save your-file-name
git checkout master
# do whatever you had to do with master
git checkout staging
git stash pop

git stash save créera une réserve qui contient vos modifications, mais elle n’est associée à aucun commit ni à aucune branche. git stash pop appliquera la dernière entrée de masquage à votre branche actuelle, en restaurant les modifications enregistrées et en le supprimant.

83
keltar

J'ai rencontré le même problème et l'ai résolu par

git checkout -f branch

et sa spécification est assez claire.

-f, --force

Lors du changement de branche, continuez même si l’index ou le working l'arbre diffère de HEAD. Ceci est utilisé pour jeter changements locaux.

Lors de l'extraction des chemins de l'index, n'échouez pas lors de la suppression de la fusion. les entrées; à la place, les entrées non fusionnées sont ignorées.

89
kiki_yu

Vous pouvez forcer l'extraction de votre branche si vous ne voulez pas valider vos modifications locales.

git checkout -f branch_name
12
Deepika Patel

J'ai rencontré le même problème et l'ai résolu par

branche git checkout -f

Eh bien, soyez prudent avec le commutateur -f. Si vous utilisez le commutateur -f, vous perdrez toutes les modifications non validées. Il peut y avoir des cas d'utilisation où il est utile d'utiliser -f, mais dans la plupart des cas, vous pouvez vouloir stash vos modifications, puis switch branches. La procédure stashing est expliquée ci-dessus.

4
BeNiza

Vous pouvez valider dans la branche actuelle, passer à une autre branche et, enfin, sélectionner ce commit (au lieu de le fusionner).

0
Vitaly Zdanevich