Очистка истории: Squashing от A до B и от D до E фиксирует в Git - PullRequest
0 голосов
/ 24 августа 2011

У меня ужасная история в репо, и я хочу немного ее упростить. Из того, что я прочитал, git rebase был бы инструментом, который я должен использовать. Что я хочу сделать, это:

Включите это:

A--------------------------I (master)
 \                        /
  B--C-------------G--H--/ (development)
      \           /
       D--E------/ (feature-1)
           \    /
            F--/ (feature-2)

В это:

A-BCDEFH--I (master)

После коммита "I" у меня есть другие коммиты в той же форме, поэтому я бы хотел, чтобы моя окончательная история выглядела так:

A-BCDEFH--I--KLMNO-P (master)

Есть какие-нибудь указатели, как этого добиться?

РЕДАКТИРОВАТЬ: Обратите внимание, что в этом примере D и F не являются коммитами слияния - они являются стандартными коммитами, поэтому ни один из них не должен исчезнуть из истории (хотя коммиты слияния, G и I должны).

1 Ответ

1 голос
/ 24 августа 2011

Первый шаг можно выполнить следующим образом:

$ git checkout -b new-master master
$ git rebase --onto A A new-master

Где A - идентификатор коммита для коммита A на вашем графике.

Это создаст новую ветку new-master, которая в конечном итоге окажется в нужной вам форме master (коммиты слияния, которые не вносят собственных изменений, будут исключены из истории). Чтобы портировать через другие ветви, проверьте их один за другим и введите git rebase --onto new-master master branchname.

Когда вы будете удовлетворены изменениями, вы можете обновить ветку master и удалить new-master:

$ git checkout master
$ git reset --hard new-master
$ git branch -d new-master
...