В вашем первом примере:
git checkout foo
git rebase master
команду rebase можно прочитать как «поместить мои коммиты в ветку foo
, так как я сначала разветвил master
на новую базу, что новой базой является текущий коммит HEAD ветви master
. "
То есть, нет, вы не перебираете master
, а скорее говорите Git, чтобы повторить ваши последние коммиты в foo
ветвь поверх самой последней ветки master
.
Изображение стоит тысячи слов при работе с Git концепциями рабочего процесса. Рассмотрим сценарий перед перебазировкой:
master: A -- B -- C
\
foo: D -- E
А вот как это выглядит после git rebase master
:
master: A -- B -- C
\
foo: D' -- E'
Вы можете ясно видеть, что ваши D
и E
фиксируют теперь сидят на новой базе (причина, по которой команда называется re-base). Эта новая база - это ГОЛОВКА текущей ветви master
, что также означает, что ваша обновленная ветка foo
теперь содержит все последние коммиты, которые могли прийти в master
с тех пор, как вы изначально разветвились. Также обратите внимание, что я обозначил коммиты D'
и E'
апострофом. Это связано с тем, что когда Git повторно применяет ваши коммиты поверх новой базы, он фактически создает новые коммиты (которые, однако, скорее всего, будут функционально очень похожи на исходные, предполагая, что у вас не было конфликты и делают очень большие изменения).