Używam pośredniego repozytorium Git do tworzenia kopii lustrzanej zdalnego repozytorium SVN, z którego ludzie mogą klonować i pracować nad nim. Repozytorium pośrednie ma co noc ponownie bazującą gałąź główną z wcześniejszego SVN-a i pracujemy nad gałęziami funkcji. Na przykład:
remote:
master
local:
master
feature
Mogę z powodzeniem przesłać moją gałąź funkcji z powrotem do pilota i otrzymać to, czego oczekuję:
remote:
master
feature
local:
master
feature
Następnie ponownie konfiguruję gałąź, aby śledzić pilota:
remote:
master
feature
local:
master
feature -> origin/feature
I wszystko w porządku. To, co chciałbym teraz zrobić, to zmienić bazę gałęzi funkcji na gałąź główną na pilocie, ale chciałbym to zrobić z mojego lokalnego komputera. Chciałbym móc:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Aby zdalna gałąź funkcji była zawsze aktualna ze zdalnym serwerem głównym. Jednak ta metoda powoduje, że Git narzeka:
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
załatwia sprawę, ale powoduje zatwierdzenie scalające, którego chciałbym uniknąć. Obawiam się, że wiadomość mówi feature -> feature
raczej niż, feature -> origin/feature
ale może to być tylko prezentacja.
Czy coś mi brakuje, czy robię to w zupełnie niewłaściwy sposób? Nie jest krytyczne, aby unikać wykonywania rebase na serwerze zdalnym, ale znacznie utrudnia to naprawianie wszelkich konfliktów scalania z rebase.