Estou usando um repositório Git intermediário para espelhar um repositório SVN remoto, no qual as pessoas podem clonar e trabalhar. O repositório intermediário tem sua ramificação principal rebatida todas as noites a partir do SVN upstream, e estamos trabalhando nas ramificações de recursos. Por exemplo:
remote:
master
local:
master
feature
Posso enviar com êxito minha ramificação de recursos de volta ao controle remoto e terminar com o que espero:
remote:
master
feature
local:
master
feature
Em seguida, reconfiguro a ramificação para rastrear o controle remoto:
remote:
master
feature
local:
master
feature -> origin/feature
E está tudo bem. O que eu gostaria de fazer a partir daqui é refazer a ramificação do recurso para a ramificação mestre no controle remoto, mas eu gostaria de fazer isso na minha máquina local. Eu gostaria de poder fazer:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Para manter a ramificação do recurso remoto atualizada com o mestre remoto. No entanto, esse método faz com que o Git se queixe:
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
faz o truque, mas causa uma consolidação de mesclagem que eu gostaria de evitar. Estou preocupado que a mensagem afirme feature -> feature
mais do que feature -> origin/feature
isso, mas isso pode ser apenas uma coisa de apresentação.
Estou perdendo alguma coisa, ou estou fazendo isso de maneira completamente errada? Não é essencial evitar fazer a rebase no servidor remoto, mas torna muito mais difícil corrigir conflitos de mesclagem da rebase.