Сложный интерактивный ребаз за один шаг? - PullRequest
6 голосов
/ 28 декабря 2010

У меня есть две ветви в git с этой формой.

* fffffff commit f
* ddddddd commit d
* bbbbbbb commit b
| * eeeeeee commit e
| * ccccccc commit c
| * aaaaaaa commit a
|/  
* 2222222 base revision 2
* 1111111 base revision 1

Я хочу перебазировать и изменить порядок коммитов, как я бы сделал с rebase --interactive. Однако я хочу чередовать несколько коммитов и получить такую ​​форму.

* ffffff2 commit f
* eeeeee2 commit e
* dddddd2 commit d
* cccccc2 commit c
* bbbbbb2 commit b
* aaaaaaa commit a
* 2222222 base revision 2
* 1111111 base revision 1

Есть ли способ сделать это ребаз за один шаг? Я попытался сделать это в два шага, перебросив коммит b поверх коммита e, а затем выполнив вторую интерактивную перебазировку, чтобы отсортировать все коммиты , Проблема в том, что я получаю конфликты слияния (например, между коммитом b и коммитом e), которые я не вижу иначе (размещая коммит b после коммита a), и не стоит разрешать конфликты.

1 Ответ

8 голосов
/ 28 декабря 2010

Начните с любой отдельной ветви (либо BranchWithF , либо BranchWithE ) и выполните интерактивную перебазировку, например

git checkout BranchWithF
git rebase -i HEAD~3

Когда появится редактор и список коммитов, добавьте (читай: наберите на клавиатуре ...) и чередуйте

pick aaaaaaa
pick ccccccc
pick eeeeeee

к списку, как считаете нужным.

После этого BranchWithF будет иметь все 6 коммитов, и вы можете выбросить BranchWithE (в котором все еще есть 3 коммита).

...