Dopo aver terminato lavorando su un ramo argomento, ho unito il ramo argomento in maestro come segue:Git: rebasing un'unione conflittuale commettere
o---*---o---o topic
/ \
o---o---o---*---o---o---+ master
i commit contrassegnati con '*' modificato lo stesso codice, quindi la fusione di piombo per unire i conflitti risolti nel commit di unione (contrassegnati con '+').
Mentre ho fuso e risolti i conflitti, il mio collega spinto nuovi commit da padroneggiare (contrassegnato come 'n'), con conseguente seguente storia:
o---*---o---o topic
/ \
o---o---o---*---o---o---+ master
\
n---n origin/master
Ora, spingendo il mio ramo principale locale naturalmente porta ad un errore, in quanto non è un fast-forward-push, così ho due scelte:
buttare via il mio lavoro, master reset di origine/master e rifare l'unione. Vorrei evitarlo, visto che dovrei risolvere nuovamente i conflitti.
Rebase master su origine/master e spingere. Ecco il mio problema: fare questo rebase (anche quando si utilizza lo switch
-p
) non funziona correttamente, il commit di merge mostra gli stessi conflitti di nuovo, anche se il nuovo commit ('n') non ha cambiato nulla toccato dal ramo dell'argomento . Così avrei dovuto risolvere i conflitti di nuovo durante il rebase e avrei lo stesso risultato con l'opzione 1.
Quello che mi piacerebbe realizzare è rebasing l'unione commit '+', senza dover risolvere i conflitti ancora:
o---*---o---o-------- topic
/ \
o---o---o---*---o---o---n---n---+ master & origin/master
Edit:
L'interruttore rerere è abilitato ma non sembra aiutare in qualsiasi modo; devo fare qualcosa di più che impostare config.rerere su true per risolvere il mio problema?
Edit 2:
Unire l'unione-commit ('+') per origin/master potrebbe anche funzionare (come proposto nei commenti e una risposta), ma porterebbe a una sorta di storia brutta che ho' Mi piacerebbe evitare di avere un solo merge commit.
È anche possibile eseguire il backmerge dell'origine/master prima di unirvi il nuovo master. – ScayTrase
@ScayTrase Sarebbe possibile, ma porterebbe a una brutta storia; Preferirei la soluzione pulita con un solo commit commit – rhabarbersaft
Sfortunatamente, non c'è una vera via d'uscita da questo: non importa quale delle due opzioni finisci per scegliere, molto probabilmente dovrai risolvere nuovamente i conflitti. Se prevedi che ti troverai nella stessa situazione in futuro, dovresti prendere in considerazione l'attivazione di ['rerere'] (http://stackoverflow.com/questions/25670519/git-rebase-preserve-merges-fails/ 25671230 # 25671230). – Jubobs