Действительно ли `git rebase master` означает` git rebase -self-on master`? - PullRequest
0 голосов
/ 17 апреля 2020

Сначала мне было трудно полностью понять git rebase, потому что я не знал, что означает слово "rebase" как глагол.

Позже кажется, что это означает "изменить основу что-то от A до B ".

Итак, когда мы делаем

git checkout foo
git rebase master

, то слова" rebase master "на самом деле не означают" rebase master branch "? Это на самом деле означает «перебазировать текущую ветку, чтобы использовать мастер в качестве базы»? Так что на самом деле означает

git checkout foo
git rebase-myself-onto master

? Это значит взять всю ветку foo и сделать ее "основанной" на мастере, не так ли?

Ответы [ 2 ]

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

В вашем первом примере:

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 повторно применяет ваши коммиты поверх новой базы, он фактически создает новые коммиты (которые, однако, скорее всего, будут функционально очень похожи на исходные, предполагая, что у вас не было конфликты и делают очень большие изменения).

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

Полная команда: git rebase target-branch upstream-branch .
Если указана target-branch, git rebase выполнит автоматически c git проверьте целевую ветку , прежде чем делать что-либо еще. В противном случае он остается в текущей ветви .

Таким образом, когда вы используете команду git rebase master , это означает перебазирование текущей ветви (foo) в восходящую ветвь ( мастер ветки).
На самом деле вы можете просто использовать git rebase master foo для достижения того же результата для:
git checkout foo
git rebase master

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