Предположим, у меня следующая ситуация:
Существует основной репозиторий User Foo. Пользовательская панель разветвляет этот репозиторий, поэтому оба репозитория синхронизированы. Теперь пользователь Bar реализует функцию и создает локальную ветвь с именем "barbranch". К тому времени, когда пользователь Bar завершил реализацию функции, Foo зафиксировал и отправил что-то в главный репозиторий. Так что в основном ситуация выглядит так:
A---B---C---D main repository
\
E forked repository (where C=E)
\
F barbranch on forked repository
Теперь, как можно вернуть вещи в нормальное состояние в репо пользователя Foo?
Наивно я бы сказал:
# switch to the local master and merge barbranch into it
git checkout master
git pull
git pull upstream
git push
git merge barbranch
# merge conflicts occur
vi somefile
git commit -a
git rebase origin master
# this conflict occurs again
vi somefile
git commit -a
git status # says I'm on (no branch) ?!
git push
g it checkout master
# conflict occurs again!
vi somefile
git commit -a
git push
# send merge request to user Foo
Наконец, это дает мне три безобразных коммита вместо одного.
Проверка документации git-rebase, которую я нашел git rebase --onto ...
. Хотя я не могу понять, какой будет точная команда и как будет выглядеть весь этот процесс в конце.