Cela m'arrive souvent: j'écris du code, vais vérifier mes modifications, puis je me rends compte que je ne suis pas dans la bonne branche pour vérifier ces modifications. Cependant, je ne peux pas passer à une autre branche sans que mes modifications soient annulées. Existe-t-il un moyen de déplacer les modifications vers une autre branche pour y être archivé?
422
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
Si vous n'avez pas encore validé vos modifications , utilisez simplement
git checkout
pour passer à la nouvelle branche, puis validez-les normalement - les modifications apportées aux fichiers ne sont pas liées à une branche particulière jusqu'à ce que vous les validiez.Si vous avez déjà validé vos modifications:
git log
et souvenez-vous du SHA du commit que vous souhaitez déplacer.git cherry-pick SHA
remplaçant le SHA par le haut.git reset HEAD~1
pour réinitialiser avant votre commit de mauvaise branche.cherry-pick
prend un commit donné et l'applique à la tête actuellement extraite, vous permettant ainsi de copier le commit sur une nouvelle branche.la source
git reset HEAD~N --soft
puisgit checkout -b
de déplacer tout le code désormais non engagé vers une nouvelle branche.Malheureusement, cela m'arrive aussi régulièrement et j'utilise
git stash
si j'ai réalisé mon erreur avantgit commit
et utilisegit cherry-pick
autrement, les deux commandes sont assez bien expliquées dans d'autres réponsesJe veux ajouter une clarification pour
git checkout targetBranch
: cette commande ne conservera votre répertoire de travail et un instantané intermédiaire que si targetBranch a le même historique que votre branche actuelleLa déclaration de @ Amber n'est pas fausse, lorsque vous passez à newBranch ,
git checkout -b newBranch
un nouveau pointeur est créé et il pointe vers le même commit exact que votre branche actuelle.En fait, s'il vous arrivait d'avoir une autre branche qui partage l'historique avec votre branche actuelle (les deux pointent au même commit), vous pouvez "déplacer vos modifications" en
git checkout targetBranch
Cependant, généralement des branches différentes signifient un historique différent, et Git ne vous permettra pas de basculer entre ces branches avec un répertoire de travail ou une zone de transfert sale. dans ce cas, vous pouvez soit faire
git checkout -f targetBranch
(nettoyer et modifier les modifications) ougit stage
+git checkout targetBranch
(nettoyer et enregistrer les modifications), simplement exécutergit checkout targetBranch
donnera une erreur:la source
Une réinitialisation logicielle réinitialisera les modifications validées dans votre index. Ensuite, vérifiez la branche sur laquelle vous aviez l'intention de vous engager. Ensuite, git commit avec un nouveau message de commit.
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
De git docs :
la source