git, rebase v интерактивная перебазировка, структура каталогов git - PullRequest
0 голосов
/ 17 октября 2018

Когда я делаю git rebase <base-commit>, я вижу, что создается каталог .git/rebase-apply, содержащий файлы onto, orig-head и original-commit, ссылающиеся на <base-commit>, head и применяемый текущий коммитсоответственно.

Когда я делаю git rebase -i <base-commit>, вместо этого я вижу каталог .git/rebase-merge, содержащий файлы onto, orig-head и stopped-sha, где stopped-sha кажется эквивалентным original-commit.

У меня вопрос, почему расхождение имен файлов и каталогов между интерактивной и неинтерактивной перебазировкой?И правильно ли я понимаю файлы?

1 Ответ

0 голосов
/ 17 октября 2018

Вы столкнулись с разницей между перебазировкой в ​​стиле git format-patch | git am и перебазировкой в ​​стиле git cherry-pick.Как отметили j в комментарии , в большинстве случаев они не должны отличаться для большинства пользователей.Изначально они были разделены на два разных бэк-энда: git-rebase--am и git-rebase--interactive.(Они все еще есть, но различие ослабевает.)

Между ними есть одно важное различие, связанное с обнаружением переименования файлов.Поскольку rebase cherry-pick в буквальном смысле использует механизм git cherry-pick, который использует базовый механизм merge , это позволяет обнаруживать переименование.Так как формат-патч ребазен не делает, его нет.Обнаружение переименования происходит медленно, поэтому, если переименований нет, иногда форматирование-исправление выполняется быстрее.

Вы можете заставить git rebase использовать режим выбора вишни без перехода к интерактивной перезагрузке, добавив -mили -s <strategy> или -X <extended-strategy-option> аргументы для любой перебазировки.

...