Comment puis-je réparer une mauvaise branche git?

Je viens de faire un excellent correctif sur la mauvaise branche. Comment puis-je annuler le dernier commit de ma branche principale, puis apporter les mêmes modifications et les intégrer à ma branche de mise à jour?

414
31 мая '10 в 8:30 2010-05-31 08:30 fixé par mikewilliamson le 31 mai '10 à 08h30 . 2010-05-31 08:30
@ 8 réponses

Si vous n'avez pas encore cliqué sur vos modifications, vous pouvez également effectuer une réinitialisation logicielle:

 git reset --soft HEAD^ 

Cela renverra un commit, mais renverra les modifications corrigées à votre index. En supposant que les branches soient relativement modernes les unes par rapport aux autres, git vous permettra d’effectuer une vérification dans une autre branche, après quoi vous pourrez simplement corriger:

 git checkout branch git commit 

L'inconvénient est que vous devez entrer à nouveau le message de validation.

618
31 мая '10 в 8:53 2010-05-31 08:53 a répondu à Blair Holloway le 31 mai 2010 à 8:53 2010-05-31 08:53

Si vous avez une copie de travail vierge (non modifiée)

Annulez un commit (assurez-vous de vérifier le hash de commit pour l'étape suivante):

 git reset --hard HEAD^ 

Pour transférer cette fixation dans une autre branche:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

Si vous avez changé ou n'avez pas suivi les changements

Notez également que git reset --hard supprimera toutes les modifications que vous pouvez apporter et qui sont injouables . Par conséquent, si vous avez celles que vous préférez:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 a répondu à Michael Mrozek le 31 mai '10 à 08:33 2010-05-31 08:33

4 ans de retard sur le sujet, mais cela peut être utile à quelqu'un.

Si vous avez oublié de créer une nouvelle branche avant de valider et de tout transférer sur le maître, peu importe ce que vous avez fait, l'approche suivante est plus simple:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Votre branche principale est maintenant origin/master et tous les nouveaux commits sont sur my_feature . Notez que my_feature est une branche locale, pas une branche distante.

61
06 февр. La réponse est donnée fotanus 06 février 2014-02-06 17:44 '14 à 17:44 2014-02-06 17:44

Si vous avez déjà effectué vos modifications, vous devrez forcer la suivante après avoir réinitialisé le HEAD.

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Avertissement: une réinitialisation matérielle annulera toutes les modifications en attente dans votre copie de travail, tandis que le fait de cliquer effacera complètement l'état de la branche distante par l'état actuel de la branche locale.

Juste au cas où, sur Windows (en utilisant la ligne de commande Windows, pas Bash), il y a en fait quatre ^^^^ au lieu d'un, donc

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 la réponse est donnée par Igor Zevaka le 31 mai 2010 à 9:11 2010-05-31 09:11

J'ai récemment fait la même chose lorsque j'ai accidentellement fait la transition vers le maître, alors que je devais me consacrer à une autre branche. Mais je n'ai rien poussé.

Si vous venez de créer la mauvaise branche et que vous n'avez rien changé depuis et que vous n'avez pas cliqué sur le référentiel, vous pouvez procéder comme suit:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

NOTE Dans l'exemple ci-dessus, je rembobine 1 fixation avec git reset HEAD ~ 1. Mais si vous voulez rembobiner n commet, vous pouvez effectuer une réinitialisation git HEAD ~ n.

De plus, si vous avez fini de travailler avec la mauvaise branche et d'écrire un autre code avant de vous rendre compte que vous avez fait la mauvaise branche, vous pouvez utiliser git stash pour enregistrer votre travail inachevé:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

NOTE J'ai utilisé ce site comme lien https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 la réponse est donnée par Ali Mizan le 31 mai 17 à 0:51 2017-05-31 00:51

Donc, si votre script est que vous avez passé master , mais que vous étiez censé passer à another-branch (qui peut ou non déjà exister), mais que vous n'avez pas encore cliqué, c'est assez facile à corriger.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Maintenant, tous vos engagements à master seront sur another-branch .

Sources: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Répondre Lorcan O'Neill 08 avril 2016-04-08 16:19 '16 à 16h19 2016-04-08 16:19

Si vous rencontrez ce problème et que vous avez Visual Studio, vous pouvez procéder comme suit:

Cliquez avec le bouton droit sur votre branche et sélectionnez View History :

2019

05 апр. la réponse est donnée à Trevor le 05 avril. 2017-04-05 02:39 '17 à 2:39 2017-04-05 02:39

Si la branche à laquelle vous souhaitez appliquer vos modifications existe déjà (par exemple, pour développer des branches), suivez les instructions fournies par fotanus ci-dessous, puis:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

Et, évidemment, vous pouvez utiliser tempbranch ou tout autre nom de branche au lieu de my_feature si vous le souhaitez.

De plus, le cas échéant, retardez le message contextuel (appliquez) jusqu'à ce que vous soyez réunis dans votre branche cible.

0
24 авг. la réponse est donnée par fbicknel 24 août. 2016-08-24 01:15 '16 à 01h15 2016-08-24 01:15

Autres questions sur tags ou Poser une question