Maison > Questions et réponses > le corps du texte
合并分支后,发现合并错了分支。
master上还没有提交任何东西,想取消这次合并,让分支回到位,肿么办?
好在现在还没commit另外的内容,如果不小心commit了,那又该怎么办啊?
黄舟2017-04-21 11:18:49
Quel étrange outil de gestion, Git. Il peut y avoir tellement d'explications à un problème, et vous ne pouvez pas dire laquelle est la bonne en un coup d'œil.
http://git-scm.com/blog/2010/03/02/undoing-merges.html Ceci est la réponse officielle après avoir fini de la lire, je la traduirai ici.
====================== La traduction simple commence ======================
Parce que trop de gens ont demandé comment annuler une fusion, git a officiellement publié ce tutoriel pour montrer comment atteindre l'objectif d'annuler une fusion dans le cadre du système idéologique existant de git.
Méthode 1, réinitialiser à la version avant la fusion, puis refaire l'opération suivante. Chaque collaborateur doit savoir comment restaurer le HEAD local :
.$ git checkout 【行merge操作时所在的分支】
$ git reset --hard 【merge前的版本号】
Méthode 2, lorsqu'il y a d'autres opérations et modifications après la fusion, git a également un moyen d'annuler la fusion, utilisez git revert :
$ git revert -m 【要撤销的那条merge线的编号,从1开始计算(怎么看哪条线是几啊?)】 【merge前的版本号】
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
1 files changed, 0 insertions(+), 2 deletions(-)
Cela créera un nouveau commit pour compenser l'opération de fusion correspondante, et plus tard, git merge [la branche représentée par ce numéro] demandera :
Already up-to-date.
Parce que l’utilisation de la méthode 2 fera penser à tort à Git que les éléments de cette branche sont des choses dont nous ne voulons pas.
Troisième méthode , comment annuler la deuxième méthode :
$ git revert 【方法二撤销merge时提交的commit的版本号,这里是88edd6d】
Finished one revert.
[master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'""
1 files changed, 2 insertions(+), 0 deletions(-)
Ça y est, vous pouvez fusionner normalement, mais il risque d'y avoir beaucoup de conflits ! !
$ git merge jk/post-checkout
Auto-merging test.txt
Merge made by recursive.
test.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
======================Fin de la traduction simple====================
Au final, j'ai toujours l'impression que les premiers sont trop gênants. Pour ceux qui utilisent WebStorm pour écrire du code sur le front-end tous les jours, jetez un œil : WebStorm Cliquez avec le bouton droit sur le fichier ou le dossier du projet, et il y a un :
Historique local -> Afficher l'historique
Après avoir cliqué dessus, une fenêtre apparaîtra où vous pourrez voir tous les changements locaux. Trouvez celui de droite et appuyez sur celui dans le coin supérieur gauche :
Revenir
Le bouton, qui est une petite flèche courbe violette, revient en arrière. C'est très utile lorsque la taille du fichier n'est pas importante et est fortement recommandé.
伊谢尔伦2017-04-21 11:18:49
Si vous êtes sûr d'abandonner le commit de cette fusion, si vous avez fusionné la mauvaise branche avec master, utilisez d'abord git reflog
ou gitg, gitk, qgit et d'autres outils pour déterminer le commit où se trouvait master avant la fusion, et puis utilisez-le sur la branche master git reset --hard <commit>
Réinitialisez le pointeur de tête. De manière générale, exécuter git reset --hard HEAD~
directement sur le maître peut également revenir au commit avant la fusion, mais il est préférable d'utiliser un commit confirmé pour la commande git reset --hard
. Notez que la commande git reset --hard
est risquée. À moins que vous ne soyez sûr de vouloir abandonner la soumission actuelle, il est préférable de git branch
créer une nouvelle référence de branche pour la soumission actuelle avant de continuer. correct.
S'il y a de nouveaux commits après une mauvaise fusion, vous pouvez utiliser git rebase --onto <错误的合并提交> <正确的合并提交> <新提交所在分支>
pour reconstruire le nouveau commit sur le bon commit de fusion après avoir terminé la fusion correcte susmentionnée. La séquence de validation reconstruite par la commande git rebase --onto
est préférablement linéaire, sinon les validations non linéaires deviendront linéaires. Si vous avez besoin de sauvegarder l'historique des soumissions non linéaires, vous pouvez envisager d'utiliser le paramètre --preserve-merges
, mais le résultat est très peu fiable, selon le degré de non-linéarité de la soumission.
PHPz2017-04-21 11:18:49
B-R-A-N-C-H
/ --Fusionner
M-A-S-T-E-R----M
Vous pouvez utiliser la valeur de hachage de git reset --hard R et revenir à R. Retour de M après fusion vers R.
伊谢尔伦2017-04-21 11:18:49
Si vous rencontrez un conflit lors de la fusion et souhaitez annuler l'opération et restaurer l'index, utilisez git merge --abort
git reset --hard peut revenir à un certain commit
git revert peut annuler un commit, et l'annulation générera un nouveau commit
Le rebase de Git n’a pas été étudié attentivement.
巴扎黑2017-04-21 11:18:49
http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/howto/revert-a-faulty-merge.txt
Qui a le temps de le traduire ?