Comment supprimer un entre-deux dans la fusion git?
-
11-10-2019 - |
Question
Je veux supprimer un entre-deux fusion (supprimer, écrasez pas), puis déplacer les 2 derniers à une nouvelle commits branche.
Ceci est mon git log --graph
actuelle:
* 3a5c453 - (2 hours ago) last commit (HEAD, master)
* b6c19f1 - (2 hours ago) Merge branch 'tade' into HEAD
|\
* | be356d0 - (2 hours ago) previous commit
| * 65328dc - (3 hours ago) some other commit in branch tade
Je veux mettre fin à ceci:
* bbbbbbb - (some time in the future) a later commit on tade (tade)
* | aaaaaaa - (some time in the future) a later commit on master (master)
| * | 3a5c453 - (2 hours ago) last commit (HEAD, newone)
| * | be356d0 - (2 hours ago) previous commit
|/ |
| * 65328dc - (3 hours ago) some other commit in branch tade
Je pensé à utiliser git rebase -i
pour enlever la fusion avec le tade de branche, puis faire un git branch newone
et git reset --hard HEAD^2
pour déplacer les 2 derniers commits à la nouvelle branche. Quand je l'ai fait rebasage cependant, il m'a montré tous les commits de la branche tade qui a obtenu fusionné en maître et | était réticent à les supprimer.
Y at-il une meilleure façon ou devrais-je aller de l'avant?
EDIT: Je mis à jour le graphique de l'Etat destiné à le rendre plus clair. Le 2 nouveaux commettras (aaaaaaa
et bbbbbbb
) ne sont là que pour illustrer l'état un peu mieux (je l'espère)
La solution
Utilisez rebasage interactif pour rebasage 3a5c453
sur be356d0
au lieu de la fusion engagent b6c19f1
(à savoir il suffit de déplacer le 3a5c453
commettre un vers le bas). Ensuite, vous devriez avoir quelque chose comme ceci:
* xxxxxxx - (2 hours ago) Merge branch 'tade' into HEAD
|\
* | yyyyyyy - (2 hours ago) last commit (HEAD)
* | be356d0 - (2 hours ago) previous commit
| * 65328dc - (3 hours ago) some other commit in branch tade
Ensuite, vous pouvez simplement créer de nouvelles branches:
git checkout -b newbranch yyyyyy
Ensuite, vous pouvez supprimer xxxxxx
et engager quelque chose au maître et finir avec ceci:
* zzzzzz - new commit on master
| * | yyyyyyy - (2 hours ago) last commit (HEAD)
| * | be356d0 - (2 hours ago) previous commit
| | * 65328dc - (3 hours ago) some other commit in branch tade