Что касается git rebase / squa sh? - PullRequest
0 голосов
/ 17 апреля 2020

У меня только что был неприятный инцидент, потому что git коснулся коммитов, которых я не собирался или ожидал коснуться. Я запустил git rebase -i HEAD~10, а затем изменил последние 4 коммита с pick на s на squa sh в один. Эта часть работала нормально, но git также изменил (по крайней мере) автора 8 предыдущих коммитов, которые затем были даны как «оригинальный автор и я», а не просто как «оригинальный автор».

Итак, мой вопрос: git rebase -i HEAD~10 касается всех 10 последних коммитов или только тех, которые я изменяю / редактирую в интерактивной подсказке в текстовом редакторе? (Бонусные баллы, если вы можете объяснить, почему он изменил 8 из них вместо 6 до моего 4.)

1 Ответ

3 голосов
/ 17 апреля 2020

git коснулся коммитов, которые я не собирался или ожидал коснуться

Простое решение: измени свои ожидания. Сделайте это, понимая git:

Фундаментальный факт о git: коммиты не могут быть изменены.

Rebase / cherry-pick делает все новые коммиты . Получающиеся эффективные изменения в новом коммите те же, что и в старом коммите, но это новый коммит с новым ha sh и новым обратным указателем - и новым автором.

Итак каждый коммит в интерактивном ребазе, для которого вы сказали pick, генерирует новый коммит, и это те коммиты, которые вы сейчас видите. Старые коммиты все еще находятся в репо, без изменений, и вы можете использовать их SHA, чтобы увидеть их. Но коммиты в результате ребазирования - это новые и разные коммиты.

Во время интерактивного ребазинга вам была предоставлена ​​возможность, если вы этого захотели, переопределить настройку автора каждого нового коммита по мере его формирования. Но вы не воспользовались этой возможностью.


Сноска. Если вы достигнете самого низкого уровня, вы можете сделать что угодно, вручную, для фиксации. Вы можете увидеть коммит как текст и изменить этот текст. Так что вполне возможно сменить автора этих новых коммитов по факту. Тем не менее, вы все еще фактически не изменяете коммит, даже если это так кажется; вы делаете новый коммит, который функционально заменяет старый, который остается.

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