2009-11-13 6 views
6

Me gustaría combinar muchas confirmaciones en una. He seguido el método descrito en una StackOverflow anterior answer que dice:Rebase muchos commits a uno en Git. ¿Qué estoy haciendo mal?

# 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 

I suponer que B en el bloque de código anterior es la más antigua cometió.

Esto es lo que me pasa:

$ 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' 

me sale el mismo error, cuando supongo que A es la más antigua.

¿Alguien puede ver lo que está pasando mal?

abrazos, Louise

Editar: He actualizado la salida, por lo que muestra lo que sucede cuando continúo.

+1

¿Error? No veo ningún error ... –

+0

En la última salida, git dice "que no es una sucursal local". Supongo que "local" significa "en el disco duro". La rama "gui" está en mi disco duro, y no en internet. ¿O la salida significa algo más? – Louise

+0

Parece que se detuvo en el paso uno, que se completó con éxito (HEAD ahora está en ddf5f7a ...), así que continúe con el resto de la receta. –

Respuesta

12

Si lo que quieres hacer es hacer esto:

A-B-C-D-E 

en:

A-BCD-E 

Simplemente puede dar a este comando:

$ git rebase -i <sha1_for_A> 

y luego editar esto:

pick B 
pick C 
pick D 
pick E 

para que diga:

pick B 
squash C 
squash D 
pick E 

Si no hay conflictos, ya está resuelto.

Sin embargo, si desea crear

ABCD-E 

(en otras palabras, si desea incluir el primer commit del repositorio en el combinado commit), olvidar esta respuesta y echar un vistazo a la approved answer de la pregunta a la que se refiere.

Cuestiones relacionadas