Перебазировать много коммитов в Git. Что я делаю неправильно? - PullRequest
6 голосов
/ 13 ноября 2009

Я хотел бы объединить много коммитов в один. Я следовал методу, описанному в предыдущем StackOverflow ответ , который говорит:

# 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

Я предполагаю, что B в приведенном выше блоке кода является самым старым коммитом.

Вот что происходит со мной:

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

Я получаю ту же ошибку, когда предполагаю, что A - самый старый.

Может кто-нибудь увидеть, что идет не так?

Объятия, Луиза

Редактировать: Я обновил вывод, поэтому он показывает, что происходит, когда я продолжаю.

1 Ответ

12 голосов
/ 13 ноября 2009

Если вы хотите сделать следующее:

A-B-C-D-E

в

A-BCD-E

Вы можете просто дать эту команду:

$ git rebase -i <sha1_for_A>

А затем отредактируйте это:

pick B
pick C
pick D
pick E

читать:

pick B
squash C
squash D
pick E

Если нет конфликтов, все готово.

Однако , если вы хотите создать

ABCD-E

(другими словами, если вы хотите включить первый коммит репозитория в комбинированный коммит), забудьте этот ответ и посмотрите на утвержденный ответ на вопрос, на который вы ссылаетесь. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...