Git - Problèmes avec le rebase et l'écrasement interactifs
Question
Je sais qu'il y a beaucoup de questions sur SO à ce sujet, mais je n'arrive pas du tout à trouver la réponse que je cherche.
Je viens de fusionner ma branche de tâches dans mon maître et je suis prêt à appliquer mes modifications à la branche principale distante.Cependant, ils s'affichent sous la forme de deux commits :
commit 878c07412aab6a6b06b7fc8dd84c2418cc4f31d8
Merge: 9ffa590 c9f5552
Author: ***
Date: Mon May 21 16:02:36 2012 +0100
Merge branch 'modelUpdate4'
Conflicts:
***.xcodeproj/project.pbxproj
commit c9f5552862872673317701c3dffd7fb6b6daa02c
Author: ***
Date: Mon May 21 15:03:21 2012 +0100
Modified model according to requests. Repopulated seeded database.
Ceci est la sortie de git log et les deux commits que je souhaite écraser en un seul.Par contre, quand je fais :
git rebase -i HEAD~2
En fait, il affiche simplement 4 commits précédemment validés (et poussés).Est-ce que je ne comprends pas comment mes succursales sont fusionnées ?Si j'essaie git rebase -i Cela affiche simplement le premier commit dans la liste des journaux git.
Merci!
La solution
Puisque vous avez dit que quatre commits avaient déjà été poussés, je suppose que votre graphique (git log --oneline --decorate --graph
) ressemble à ceci, où vous avez des commits de branchement entre master
et modelUpdate4
déjà poussé vers le dépôt distant :
* (master, modelUpdate4, HEAD) Merge branch 'modelUpdate4'
| \
| * (origin/modelUpdate4) Modified model according to requests. [HEAD^2]
| |
| * Another commit on modelUpdate4
| |
| * Yet another commit on modelUpdate4!
| |
* | (origin/master) Something that conflics with a commit in modelUpdate4 [HEAD~1]
| /
* Previous commit on master [HEAD~2]
HEAD~2
est le premier parent du premier parent, et puisque votre HEAD
est une fusion de modelUpdate4
dans master
, il fait référence à deux commits sur le master
doubler. HEAD^2
est HEAD's
deuxième parent, donc le commit avant HEAD
en bas du modelUpdate4
doubler.(Voir également: http://paulboxley.com/blog/2011/06/git-caret-and-tilde)
Si HEAD~2
est votre nouvelle base, vous obtiendrez tous les commits entre HEAD~2
et master
en ligne droite.Vous devrez également gérer le conflit de branche dans le modelUpdate4
engagez-vous là où cela se produit.
* (master, HEAD) Merge branch 'modelUpdate4'
|
* Modified model according to requests. Repopulated seeded database.
|
* Another commit on modelUpdate4
|
* Yet another commit on modelUpdate4!
|
* Something on master that conflics with modelUpdate4
|
* Previous commit on master
Si quelqu'un d'autre utilise ces branches distantes ou si vous souhaitez conserver votre historique de branchement, ne rebasez pas.Cela réécrira l'historique qui se trouve déjà dans le dépôt distant, ce qui ne sera qu'un casse-tête pour tout le monde.Poussez le commit de fusion et vous serez en or.
Alternativement, vous pouvez rebaser directement sur origin/master
. origin/modelUpdate4
finirait dans les boonies de git, mais comme il s'agit d'une branche de tâches, je parie que vous alliez la supprimer de toute façon.