Идемпотентный git rebase не справляется с ложными конфликтами - PullRequest
7 голосов
/ 28 марта 2012

В моем репозитории git ~ 2000 коммитов. В образовательных целях я играл с git rebase -i.

Когда я набираю git rebase -i first-commit (где first-commit - это тег для первоначальной фиксации репо) и ничего не меняю (то есть оставляю все pick <hash> без изменений), git начинает воспроизводить мою историю, но терпит неудачу на десятках коммитов со ссылкой на конфликты. Что вызвало бы это? Почему он не просто воспроизводит всю мою историю?

1 Ответ

6 голосов
/ 28 марта 2012

Я попытался воссоздать его в проекте с открытым исходным кодом и получил аналогичные результаты, о которых сообщалось о конфликтах при перебазировании поверх первого коммита с использованием интерактивной перебазировки.

Я запустил его во второй раз и заметил, что это происходит при одном и том же коммите.

git clone git://git.lttng.org/lttng-tools.git
git tag first-commit fac6795
git rebase -i first-commit

Could not apply e4baff1... listing and activation of loglevel by number
git rebase --abort

Похоже, конфликт происходил вблизи точки слияния:

* 843f5df (HEAD, tag: new-tag) API change for lttng_destroy_session prototype
*   90192ee Merge branch 'master'
|\  
| * 4dbd54a update loglevel printout
| * e4baff1 listing and activation of loglevel by number
* | 76d45b4 Add support for UST enable all tracepoints
* | 6181537 Cleanup lttng enable event command
|/  
* 13dce3b loglevels: allow enable/disable
* 81afa34 Add loglevel to event list
* 57ab763 ABIs now support 256 char event names

повторное выполнение ребазы с опцией -p прошло успешно:

-p, --preserve-merges
           Instead of ignoring merges, try to recreate them.

           This uses the --interactive machinery internally, but combining it with the --interactive option explicitly is generally not a
           good idea unless you know what you are doing (see BUGS below).

git rebase изменит историю, чтобы стать более линейной.Поскольку в истории есть слияния, их необходимо будет разрешить, если возникнут конфликты, когда точка слияния сглажена.

...