Я использую промежуточный репозиторий Git для зеркалирования удаленного репозитория SVN, из которого люди могут клонировать и работать. В промежуточном репозитории есть основная ветвь, которая каждую ночь обновляется из вышестоящего SVN, и мы работаем над функциональными ветками. Например:
remote:
master
local:
master
feature
Я могу успешно отправить свою функциональную ветку обратно на удаленный компьютер и получить то, что я ожидал:
remote:
master
feature
local:
master
feature
Затем я повторно настраиваю ветвь для отслеживания удаленного:
remote:
master
feature
local:
master
feature -> origin/feature
И все хорошо. Что я хотел бы сделать здесь, так это переназначить ветку функций на главную ветку на удаленном компьютере, но я хотел бы сделать это с моей локальной машины. Я хотел бы иметь возможность:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Поддерживать ветку удаленных функций в актуальном состоянии с удаленным мастером. Однако этот метод вызывает у Git жалобу:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
git pull
делает свое дело, но вызывает фиксацию слияния, чего я бы хотел избежать. Я обеспокоен тем, что в сообщении указывается функция -> функция
, а не функция -> origin / feature
, но это может быть просто презентация.
Я что-то упускаю или делаю это неправильно? Избегать перебазирования на удаленном сервере не критично, но это значительно усложняет устранение любых конфликтов слияния при перебазировании.