Перебазирование удаленных веток в Git

Я использую промежуточный репозиторий 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 , но это может быть просто презентация.

Я что-то упускаю или делаю это неправильно? Избегать перебазирования на удаленном сервере не критично, но это значительно усложняет устранение любых конфликтов слияния при перебазировании.

127
задан Aziz Shaikh 4 December 2015 в 12:00
поделиться