Question Comment réparer un engagement sur la mauvaise branche Git?


Je viens de faire un très bon engagement dans la mauvaise branche. Comment puis-je annuler la dernière validation de ma branche principale, puis prendre les mêmes modifications et les insérer dans ma branche de mise à niveau?


470
2018-05-31 05:30


origine


Réponses:


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

git reset --soft HEAD^

Cela annulera la validation, mais remettra les modifications validées dans votre index. En supposant que les succursales soient relativement à jour les unes par rapport aux autres, git vous permettra de passer à l’autre branche, après quoi vous pourrez simplement valider:

git checkout branch
git commit

L'inconvénient est que vous devez ressaisir votre message de validation.


708
2018-05-31 05:53



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

Pour annuler une validation (assurez-vous de noter le hash de la validation pour l'étape suivante):

git reset --hard HEAD^

Pour tirer ce commit dans une branche différente:

git checkout other-branch
git cherry-pick COMMIT-HASH

Si vous avez modifié ou non des modifications

Notez également que git reset --hard volonté tuer tout changement non suivi et modifié vous pourriez avoir, alors si vous avez ceux que vous préférez:

git reset HEAD^
git checkout .

88
2018-05-31 05:33



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

Si vous avez oublié de créer une nouvelle branche avant de la valider et que vous l'avez validée sur master, quel que soit le nombre de validations effectuées, 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

Maintenant, vous avez votre branche maître égale à origin/master et tous les nouveaux commits sont sur my_feature. Notez que my_feature est une branche locale, pas une branche éloignée.


83
2018-02-06 14:44



Si vous avez déjà appuyé sur vos modifications, vous devrez forcer votre prochaine pression après avoir réinitialisé la HEAD.

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

Attention: une réinitialisation matérielle annulera toute modification non validée dans votre copie de travail, tandis qu'une poussée de force écrasera complètement l'état de la branche distante avec l'état actuel de la branche locale.

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

git reset --hard HEAD^^^^

17
2018-05-31 06:11



J'ai récemment fait la même chose, où j'ai involontairement changé de maître, alors que j'aurais dû m'engager dans une autre branche. Mais je n'ai rien poussé.

Si vous venez de vous engager dans la mauvaise branche, et que vous n'avez rien changé depuis, et que vous n'avez pas poussé vers le repo, alors vous pouvez faire ce qui 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's 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 rembobinais 1 commit avec git reset HEAD ~ 1. Mais si vous voulez revenir en arrière, vous pouvez faire git reset HEAD ~ n.

De plus, si vous vous êtes engagé dans la mauvaise branche et que vous avez fini par écrire du code avant de réaliser que vous vous êtes engagé dans la mauvaise branche, vous pouvez utiliser git stash pour enregistrer votre travail en cours:

// 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 référence https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/


9
2018-05-30 21:51



Donc, si votre scénario est que vous vous êtes engagé à master mais destiné à s'engager à another-branch (qui peut ou non déjà exister) mais vous n'avez pas encore poussé, 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 sera sur another-branch.

Source d'amour: http://haacked.com/archive/2015/06/29/git-migrate/


4
2018-04-08 13:19



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

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 pourriez utiliser tempbranch ou tout autre nom de branche au lieu de my_feature si tu voulais.

En outre, le cas échéant, retardez le pop caché (s’applique) jusqu’à ce que vous ayez fusionné dans votre branche cible.


0
2017-08-23 22:15



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

Faites un clic droit sur votre branche et sélectionnez View History:

enter image description here

Cliquez avec le bouton droit de la souris sur le commit auquel vous voulez retourner. Et revenir ou réinitialiser au besoin.

enter image description here


0
2018-04-04 23:39