2012-01-08 4 views
8

Ho lavorato a una copia locale di un repository git remoto. Ho creato un ramo sulla mia copia locale, chiamiamolo "my_branch". Mi sono impegnato alcune volte su my_branch.Git rebase un ramo sul master fallito, come risolvere?

Recentemente ho spinto "my_branch" in remoto. Tuttavia non sapevo che qualcun altro ha aggiunto una versione al master remoto. Quindi, l'ho portato al mio maestro locale.

Quindi ... per farla breve, il mio repository locale è simile a questo (sto cercando di utilizzare la convenzione di diagrammi here).

--C0--------------C7-- (local master) 
     \ 
     --C1-C2-C3--  (local my_branch) 
      \ 
       --C4-C5-C6--  (local sandbox_branch) 

voglio farlo sembrare come:

--C0--------------C7-- (local master) 
         \ 
         --C1'-C2'-C3'--  (local my_branch) 
          \ 
           --C4'-C5'-C6'--  (local sandbox_branch) 

ho cercato di rebase my_branch SU maestro locale, ma ho ottenuto questo messaggio di errore (sto usando uno strumento visivo per git chiamato GitX):

Rebase Failed! 
There was an error rebasing HEAD with branch 'master'. 

command: git rebase refs/heads/master 

It seems that I cannot create a rebase-apply directory, and 
I wonder if you are in the middle of patch application or another 
rebase. If that is not the case, please 
    rm -fr /my_project_directory/.git/rebase-apply 
and run me again. I am stopping in case you still have something 
valuable there. 

Cosa sto sbagliando? Come dovrei gestirlo? Se dovessi fare questo sulla riga di comando qual è il comando per farmi arrivare allo stato nel diagramma sopra?

UPDATE 1

BTW, io non sono nel bel mezzo di una patch un'applicazione o un altro rebase ... almeno non intenzionale. Dopo aver scoperto che il telecomando è stato aggiornato DOPO che ho spinto, ho fatto un recupero. Potrebbe aver fatto qualcosa per far credere a GitX che sono nel mezzo di una patch di applicazione o di un altro rebase?

Ho anche aggiornato il diagramma per essere più accurato. C'è una filiale di my_branch. Non l'ho incluso nella domanda originale b/c, non pensavo che sarebbe stato importante. Sono compresi nel caso in cui ...

UPDATE 2

FYI ... L'albero maestro di 'locale' e per 'a distanza' assomiglia al diagramma che ho disegnato, tranne che doesn' Ho il sandbox_branch.

+0

Hai provato 'git rebase --abort'? –

+0

"Sembra che non sia possibile creare una directory di rebase-apply, e Mi chiedo se ci si trova nel mezzo dell'applicazione patch o un altro rebase" <- è questo il caso? – fge

+0

@fge. Buona domanda. Ho aggiornato la descrizione. – milesmeow

risposta

24

git rebase ha trovato una directory .git/rebase-apply e quindi presume che si possa essere nel mezzo di un rebase. Questo sarebbe successo se ci fosse stato un conflitto durante un precedente rebase e il rebase non fosse finito; Ad esempio, non hai eseguito uno di git rebase --abort, git rebase --skip o git rebase --continue (l'ultimo dopo aver risolto il conflitto).

In ogni caso, non importa come sei finito in questo stato se non pensi di aver eseguito git rebase. Semplicemente rm -fr /my_project_directory/.git/rebase-apply come suggerisce l'aiuto e dovresti essere in grado di fare il rebase ora.

Ma aspetta. Dal momento che dici di aver già pubblicato il tuo ramo nel repository remoto, non dovresti provare a rebase su di esso. Infatti, se il tuo telecomando è impostato per negare i commit non rapidi (che sembra essere una best practice generalmente consigliata), non sarai nemmeno in grado di spingere le modifiche rebase al tuo telecomando. In generale, è una cattiva pratica provare a modificare un commit (che è ciò che fa git rebase) dopo averlo pubblicato su un telecomando.

+0

Uh oh ... Allora cosa dovrei fare? Sono un po 'nuovo da fare. 'git rebase --abort' prima? FYI ... L'albero master per 'local' e per 'remote' assomiglia al diagramma che ho disegnato, tranne che non ha sandbox_branch. – milesmeow

+0

Suppongo che potrei potenzialmente unire le mie modifiche al master localmente ... e poi spingere al remoto ... è questa la strada da percorrere? – milesmeow

+0

Vuoi pubblicare queste modifiche sul master remoto? Se sì, dovresti unire il ramo in master e passare al remoto. Se vuoi solo assicurarti che anche le ultime modifiche del master facciano parte del tuo ramo, unisci il master alla tua filiale locale e invialo al tuo remoto. –