2009-11-13 12 views
6

Vorrei unire molti commit in uno. Ho seguito il metodo descritto in una precedente StackOverflow answer che dice:Rebase molti commit a uno in Git. Che cosa sto facendo di sbagliato?

# Go back to the last commit that we want to form the initial commit (detach HEAD) 
git checkout <sha1_for_B> 

# reset the branch pointer to the initial commit, 
# but leaving the index and working tree intact. 
git reset --soft <sha1_for_A> 

# amend the initial tree using the tree from 'B' 
git commit --amend 

# temporarily tag this new initial commit 
# (or you could remember the new commit sha1 manually) 
git tag tmp 

# go back to the original branch (assume master for this example) 
git checkout master 

# Replay all the commits after B onto the new initial commit 
git rebase --onto tmp <sha1_for_B> 

# remove the temporary tag 
git tag -d tmp 

considera che B nel blocco di codice sopra è il più antico commit.

Ecco cosa succede a me:

$ cd rebase-test 
$ git branch 
    gui 
* master 
$ git log --pretty=oneline 
7391d1b8e51b766190794ede49e3338307a64225 Merge branch 'gui' 
c69d44b0d3615d4f537ca42fe67ee58e2728a31a Work in progress. Next port transform() 
e710a839c5aee0b07178da1f97999fa6dba445d6 audio_load() implemeted in callback.c 
... 
$ git checkout c69d44b0d3615d4f537ca42fe67ee58e2728a31a 
Note: moving to 'c69d44b0d3615d4f537ca42fe67ee58e2728a31a' which isn't a local branch 
If you want to create a new branch from this checkout, you may do so 
(now or later) by using -b with the checkout command again. Example: 
    git checkout -b <new_branch_name> 
HEAD is now at c69d44b... Work in progress. Next port transform() 
$ git reset --soft 7391d1b8e51b766190794ede49e3338307a64225 
$ git commit --amend 
[detached HEAD ad4e92a] new 
$ git tag tmp 
$ git checkout gui 
Previous HEAD position was ad4e92a... new 
Switched to branch 'gui' 
$ git rebase --onto tmp c69d44b0d3615d4f537ca42fe67ee58e2728a31a 
First, rewinding head to replay your work on top of it... 
Applying: Removed build files 
Applying: Removed more build files 
Applying: Fixed infile_handler crash 
/home/louise/rebase-test/.git/rebase-apply/patch:90: space before tab in indent. 
     for(int j = 0; j < data->audio_info_load->channels; j++) { 
/home/louise/rebase-test/.git/rebase-apply/patch:91: space before tab in indent. 
      if(j == selected_channel) { 
/home/louise/rebase-test/.git/rebase-apply/patch:92: space before tab in indent. 
      data->mono_channel[while_counter * const_frames_read + i] = bufferIn[i * data->audio_info_load->channels + selected_channel]; 
/home/louise/rebase-test/.git/rebase-apply/patch:93: space before tab in indent. 
      } 
/home/louise/rebase-test/.git/rebase-apply/patch:94: space before tab in indent. 
     } 
warning: 5 lines add whitespace errors. 
Applying: sf_readf_double() crashes 
Applying: Crash fixed 
Applying: Created audio_load() 
/home/louise/rebase-test/.git/rebase-apply/patch:73: space before tab in indent. 
     for(int j = 0; j < data->audio_info_load->channels; j++) { 
/home/louise/rebase-test/.git/rebase-apply/patch:74: space before tab in indent. 
      if(j == selected_channel) { 
/home/louise/rebase-test/.git/rebase-apply/patch:75: space before tab in indent. 
      data->mono_channel[while_counter * const_frames_read + i] = bufferIn[i * data->audio_info_load->channels + selected_channel]; 
/home/louise/rebase-test/.git/rebase-apply/patch:76: space before tab in indent. 
      } 
/home/louise/rebase-test/.git/rebase-apply/patch:77: space before tab in indent. 
     } 
warning: 5 lines add whitespace errors. 
Applying: Clean up 
/home/louise/rebase-test/.git/rebase-apply/patch:58: trailing whitespace. 

/home/louise/rebase-test/.git/rebase-apply/patch:60: trailing whitespace. 

/home/louise/rebase-test/.git/rebase-apply/patch:67: trailing whitespace. 

/home/louise/rebase-test/.git/rebase-apply/patch:72: trailing whitespace. 

/home/louise/rebase-test/.git/rebase-apply/patch:80: trailing whitespace. 

warning: squelched 11 whitespace errors 
warning: 16 lines add whitespace errors. 
Applying: transform_inv() implemented 
/home/louise/rebase-test/.git/rebase-apply/patch:115: trailing whitespace. 
    free(data->mono_channel); 
warning: 1 line adds whitespace errors. 
Applying: audio_save() crash 
Applying: Crash fixed 
Applying: Backend finally implemented in gui. 
$ git tag -d tmp 
Deleted tag 'tmp' 

ottengo lo stesso errore, quando suppongo che A è la più antica.

Qualcuno può vedere cosa non va?

Abbracci, Louise

Edit: Ho aggiornato l'uscita, in modo che mostra cosa succede quando io continuo.

+1

Errore? Non vedo alcun errore ... –

+0

Nell'ultimo output git dice "che non è un ramo locale". Suppongo che "locale" significhi "sull'hard disk". Il ramo "gui" è sul mio hard disk, e non su internet. O l'output significa qualcos'altro? – Louise

+0

Sembra essersi fermato al punto uno, che è stato completato con successo (HEAD è ora in ddf5f7a ...), quindi continua con il resto della ricetta. –

risposta

12

Se ciò che si vuole fare è rendere questo:

A-B-C-D-E 

in:

A-BCD-E 

Si può semplicemente dare questo comando:

$ git rebase -i <sha1_for_A> 

e quindi modificare questo:

pick B 
pick C 
pick D 
pick E 

per leggere:

pick B 
squash C 
squash D 
pick E 

Se non ci sono conflitti, si è fatto.

Tuttavia, se si desidera creare

ABCD-E 

(in altre parole, se si desidera includere il primo commit del repository nel combinato commit), dimenticare questa risposta e dare un'occhiata alla approved answer della domanda a cui fai riferimento.

Problemi correlati