2013-10-18 14 views
9

Ho repository remoto. Sì:git rebase con conflitto non funziona

git clone https://[email protected]/mylogin/myrepo.git 

Clona successo. I have git tree:
C (master)
|         B: A
|    /
B  /
|
A
|
A0
|
A01 (origine/testa) (origine/master)
|
(alcuni commit)

ho bisogno:
                                B: A
C (master)  / 

Ho bisogno rebase ramo Da B a C (master) Cosa faccio:

git checkout b1 
Switched to branch 'b1' 
git rebase master 
First, rewinding head to replay your work on top of it... 
Applying: B:A 
Using index info to reconstruct a base tree... 
M index1.txt 
Falling back to patching base and 3-way merge... 
Auto-merging index1.txt 
CONFLICT (content): Merge conflict in index1.txt 
Failed to merge in the changes. 
Patch failed at 0001 B:A 
The copy of the patch that failed is found in: 
    /pth/to dir/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

git branch 
* (no branch) 
    b1 
    master 

Cosa devo fare? Posso passare al ramo b1, risolvere conflitti e commit, ma non aiuta (l'ho testato).

risposta

26

Git interromperà il rebasing se rileva conflitti che non è in grado di risolvere automaticamente. Nel tuo caso, hai un conflitto nel file index1.txt (lo puoi vedere nell'output, e più avanti anche durante l'esecuzione di git status). È necessario correggere i conflitti prima di continuare. Modifica il file e vedrai i marcatori <<<<<<, ====== e >>>>>>. Il conflitto si trova in queste righe, dove ciò che è tra lo < e lo = sono le modifiche nel master e successivamente (fino allo >) le modifiche nel ramo b1. Risolvilo, rimuovi i segnalini git (<, =, >), quindi esegui git add index1.txt e passa al file successivo (se ne hai uno, in questo esempio solo i conflitti index1.txt). Dopo aver aggiunto tutti i file, esegui git rebase --continue. Se git incontra un altro conflitto, ripeti semplicemente il processo per ogni file con cui ha problemi. Una volta terminato, git ti dirà che rebase è terminato con successo e tornerai sul ramo b1. Se si desidera interrompere il processo e tornare all'originale b1 (prima del comando rebase), eseguire semplicemente git rebase --abort.

Ricordare che quando si risolvono i conflitti, non modificare il file come dovrebbe essere nel commit finale, ma solo introdurre le modifiche che si desideravano per quel commit specifico. Altre modifiche verranno aggiunte man mano che git continua a ribadire e ad applicare i tuoi commit.

+0

"non modificare il file come dovrebbe essere nel commit finale, piuttosto introdurre solo le modifiche desiderate per quel commit specifico" +1. Mi stavo chiedendo come mai queste righe di codice sono ancora lì, quando le ho cambiate! – Swapnil

+2

Nota che dovresti modificare il file con il conflitto ('index1.txt' nel tuo caso), non il file' patch'. 'patch' è solo lì per fare riferimento se non si è sicuri di quale cambiamento venga ridefinito. –