_ {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
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 Push
ed); 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.
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.
Vous pouvez forcer l'extraction de votre branche si vous ne voulez pas valider vos modifications locales.
git checkout -f branch_name
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.
Vous pouvez valider dans la branche actuelle, passer à une autre branche et, enfin, sélectionner ce commit (au lieu de le fusionner).