Я не понимаю, как использовать git-rebase
, и я рассматриваю следующий пример.
Давайте запустим репозиторий в ~/tmp/repo
:
$ git init
Затем добавьте файл foo
$ echo "hello world" > foo
который затем добавляется и фиксируется:
$ git add foo
$ git commit -m "Added foo"
Далее я запустил удаленный репозиторий. В ~/tmp/bare.git
я побежал
$ git init --bare
Чтобы связать repo
с bare.git
я побежал
$ git remote add origin ../bare.git/
$ git push --set-upstream origin master
Далее, давайте ответим, добавим файл и установим апстрим для новой ветви b1
:
$ git checkout -b b1
$ echo "bar" > foo2
$ git add foo2
$ git commit -m "add foo2 in b1"
$ git push --set-upstream origin b1
Теперь пришло время переключиться обратно к master
и что-то там изменить:
$ echo "change foo" > foo
$ git commit -a -m "changed foo in master"
$ git push
На данный момент в master
файл foo
содержит измененный foo, в то время как в b1
это все еще привет мир. Наконец, я хочу синхронизировать b1
с прогрессом, достигнутым в master
.
$ git checkout b1
$ git fetch origin
$ git rebase origin/master
В этот момент git st
возвращает:
# On branch b1
# Your branch and 'origin/b1' have diverged,
# and have 2 and 1 different commit each, respectively.
# (use "git pull" to merge the remote branch into yours)
#
nothing to commit, working directory clean
На этом этапе содержание foo
в ветви b1
изменяется foo . Так что же означает это предупреждение? Я ожидал, что должен сделать git push
, git предлагает сделать git pull
... Согласно этому ответу , это более или менее так, и в своем комментарии @FrerichRaabe прямо говорит, что мне не нужно делать тягу. Что тут происходит? В чем опасность, как действовать дальше? Как история должна быть последовательной? Какова взаимосвязь между описанным выше случаем и следующей цитатой:
Не перебазируйте коммиты, которые вы поместили в публичный репозиторий.
взято из Pro Git книги.
Я предполагаю, что это как-то связано, и если нет, я бы хотел знать, почему. Какова связь между приведенным выше сценарием и процедурой, которую я описал в этом посте.