Git - Problemi con rebase interattivo e schiacciamento
Domanda
So che ci sono molte domande su questo, ma non riesco a trovare la risposta che sto cercando affatto.
Ho appena unito il mio ramo del compito nel mio master, e sono pronto a spingere le mie modifiche al ramo principale remoto.Tuttavia, stanno visualizzando come due commit:
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.
.
Questa è la produzione del registro Git e i due commit che desidero schiacciare come uno.Tuttavia, quando faccio:
git rebase -i HEAD~2
.
In realtà viene visualizzato solo 4 precedentemente commesso (e spinto).Sto fraintendendo come i miei rami sono stati uniti?Se provo e git rebase -i questo mostra il primo commit nell'elenco dei registri Git.
Grazie!
Soluzione
Dal momento che hai detto che quattro commit sono stati già spinti, immagino che il tuo grafico (git log --oneline --decorate --graph
) sia simile a questo, dove hai un commit di ramificazione tra master
e modelUpdate4
già spinto al remoto:
* (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
è il primo genitore del primo genitore, e dal momento che il tuo HEAD
è un unione di modelUpdate4
in master
, si riferisce a due commette la linea master
. HEAD^2
è HEAD's
Secondo genitore, quindi il commit prima di HEAD
in basso la linea modelUpdate4
. (Vedi anche: http://paulbowingy.com/blog/2011/06 / git-caret-and-tilde )
Se HEAD~2
è la tua nuova base, riceverai tutti i commit tra HEAD~2
e master
in linea retta. Dovrai anche affrontare il conflitto del ramo nel commit modelUpdate4
dove succede.
* (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
.
Se qualcun altro sta usando quei rami remoti o si desidera mantenere la cronologia di ramificazione, non rebase. Riscrive la storia che è già nel repo remoto, che sarà solo un mal di testa per tutti gli altri. Spingere l'unione commettere e sarai dorato.
In alternativa, potresti restasse direttamente su origin/master
. origin/modelUpdate4
finirebbe nelle boonie di Git, ma dal momento che è un ramo di attività che scommetto che hai appena cancellato comunque.