Je viens de m'engager parfaitement dans la mauvaise branche. Comment annuler la dernière validation de ma branche principale, puis prendre ces mêmes modifications et les insérer dans ma branche de mise à niveau?
git
git-commit
mikewilliamson
la source
la source
git reset --soft HEAD\^
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 valider et de tout valider sur master, quel que soit le nombre de validations que vous avez effectuées, l'approche suivante est plus simple:
Vous avez maintenant votre branche principale égale à
origin/master
et toutes les nouvelles validations sont activéesmy_feature
. Notez qu'ilmy_feature
s'agit d'une branche locale, pas distante.la source
master
, puis remettremaster
àorigin/master
.origin/master
est déjà sur le commit où vous souhaitez réinitialiser! Le crédit pour l'astuce est cependant cette page: github.com/blog/…Si vous avez une copie de travail propre (non modifiée)
Pour annuler un commit (assurez-vous de noter le hachage du commit pour l'étape suivante):
Pour tirer ce commit dans une branche différente:
Si vous avez des modifications modifiées ou non suivies
Notez également que
git reset --hard
cela supprimera toutes les modifications non suivies et modifiées que vous pourriez avoir, donc si vous en avez, vous préférerez peut-être:la source
git rev-parse BRANCH_NAME
pour obtenir le sha.git reflog show <branch>
!git stash
avant la réinitialisation et utilisergit stash pop
ensuite pour les restaurer, donc pas besoin d'avoir peur de la--hard
partieSi vous avez déjà poussé vos modifications, vous devrez forcer votre prochaine poussée après avoir réinitialisé la TETE.
Avertissement: une réinitialisation matérielle annulera toutes les modifications non validées dans votre copie de travail, tandis qu'une poussée forcée remplacera 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), c'est en fait quatre
^^^^
au lieu d'un, donc c'estla source
git reset --hard COMMIT_HASH
git push --force
J'ai récemment fait la même chose, où j'ai accidentellement commis un changement 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, que vous n'avez rien changé depuis et que vous n'avez pas poussé vers le référentiel, vous pouvez effectuer les opérations suivantes:
REMARQUE: dans l'exemple ci-dessus, je rembobinais 1 commit avec git reset HEAD ~ 1. Mais si vous vouliez rembobiner n commits, alors vous pouvez faire git reset HEAD ~ n.
De plus, si vous avez fini par vous engager dans la mauvaise branche et que vous avez également fini d'écrire du code avant de vous rendre compte que vous vous êtes engagé dans la mauvaise branche, vous pouvez utiliser git stash pour enregistrer votre travail en cours:
REMARQUE: J'ai utilisé ce site Web comme référence https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
la source
git checkout -b new_branch
juste à partir de là, les commits étaient intacts, juste poussés et j'ai créé un PR, didn ' Je ne dois pas recommencer.Donc, si votre scénario est que vous vous êtes engagé
master
mais que vous vouliez vous engageranother-branch
(qui peut ou non exister déjà) mais que vous n'avez pas encore poussé, c'est assez facile à corriger.Tous vos engagements
master
seront désormais activésanother-branch
.Source d'amour avec: http://haacked.com/archive/2015/06/29/git-migrate/
la source
another-branch
existait déjà. Dans ce cas, il a simplement annulé les engagements que j'avais faits pour maîtriser et ne les a pas misanother-branch
.Pour développer cette réponse, au cas où vous auriez plusieurs commits à passer, par exemple
develop
ànew_branch
:la source
Si vous rencontrez ce problème et que vous disposez de Visual Studio, vous pouvez effectuer les opérations suivantes:
Faites un clic droit sur votre succursale et sélectionnez
View History
:Cliquez avec le bouton droit sur le commit auquel vous souhaitez revenir. Et inversez ou réinitialisez au besoin.
la source
Pour plusieurs validations sur la mauvaise branche
Si pour vous, il ne s'agit que d'un seul commit, il existe de nombreuses autres solutions de réinitialisation plus faciles. Pour moi, j'avais environ 10 commits accidentellement effectués au
master
lieu de, appelons-lebranch_xyz
, et je ne voulais pas perdre l'historique des commits .Ce que vous pouviez faire et ce qui m'a sauvé, c'était d'utiliser cette réponse comme référence, en utilisant un processus en 4 étapes, qui est -
master
branch_xyz
master
Voici les étapes ci-dessus en détail -
Créer une nouvelle branche à partir du
master
(où j'avais accidentellement commis de nombreux changements)Remarque: le
-b
drapeau est utilisé pour créer une nouvelle brancheJuste pour vérifier si nous avons bien fait, je ferais un rapide
git branch
pour m'assurer que nous sommes sur latemp_branch_xyz
branche etgit log
pour vérifier si nous avons bien fait les commits.Fusionnez la branche temporaire dans la branche initialement destinée aux commits, c'est-à-dire
branch_xyz
.Tout d'abord, passez à la branche d'origine, c'est-à-dire
branch_xyz
(vous devrez peut-êtregit fetch
si vous ne l'avez pas encore fait)Remarque: n'utilisez pas l'
-b
indicateurMaintenant, fusionnons la branche temporaire dans la branche que nous avons actuellement en cours de paiement
branch_xyz
Vous devrez peut-être vous occuper de certains conflits ici, le cas échéant. Vous pouvez pousser (je voudrais) ou passer aux étapes suivantes, après une fusion réussie.
Annulez les engagements accidentels d'
master
utiliser cette réponse comme référence, passez d'abord àmaster
puis annulez-le tout le long du chemin pour correspondre à la télécommande (ou pour un commit particulier, si vous le souhaitez)
Encore une fois, je ferais un
git log
avant et un après pour m'assurer que les changements prévus prennent effet.Effacer les preuves, c'est supprimer la branche temporaire. Pour cela, vous devez d'abord extraire la branche dans laquelle le temp a été fusionné, c'est-à-dire
branch_xyz
(si vous restez surmaster
et exécutez la commande ci-dessous, vous pourriez obtenir unerror: The branch 'temp_branch_xyz' is not fully merged
), alorspuis supprimez la preuve de cet incident
Voilà.
la source
Si la branche à laquelle vous souhaitez appliquer vos modifications existe déjà ( développement de branche , par exemple), suivez les instructions fournies par fotanus ci-dessous, puis:
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 la fermeture du cache (appliquez) jusqu'à ce que vous ayez fusionné dans votre branche cible.
la source
Pour moi, cela a été résolu en annulant le commit que j'avais poussé, puis en sélectionnant ce commit dans l'autre branche.
Vous pouvez utiliser
git log
pour trouver le hachage correct, et vous pouvez pousser ces changements quand vous le souhaitez!la source