J'utilise un référentiel Git intermédiaire pour mettre en miroir un référentiel SVN distant, à partir duquel les gens peuvent cloner et travailler. Le référentiel intermédiaire a sa branche principale rebasée tous les soirs à partir du SVN en amont, et nous travaillons sur des branches de fonctionnalités. Par exemple:
remote:
master
local:
master
feature
Je peux repousser avec succès ma branche de fonctionnalités vers la télécommande et obtenir ce que j'attends:
remote:
master
feature
local:
master
feature
Je reconfigure ensuite la branche pour suivre la télécommande:
remote:
master
feature
local:
master
feature -> origin/feature
Et tout va bien. Ce que je voudrais faire à partir d'ici est de rebaser la branche de fonctionnalité vers la branche principale de la télécommande, mais je voudrais le faire à partir de ma machine locale. J'aimerais pouvoir faire:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Pour maintenir la branche de fonctionnalité distante à jour avec le maître distant. Cependant, cette méthode amène Git à se plaindre:
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
fait l'affaire mais provoque un commit de fusion que j'aimerais éviter. Je crains que le message indique feature -> feature
plutôt que, feature -> origin/feature
mais ce n'est peut-être qu'une présentation.
Suis-je en train de rater quelque chose ou de m'y prendre complètement de la mauvaise manière? Il n'est pas essentiel d'éviter de faire le rebase sur le serveur distant, mais cela rend la résolution des conflits de fusion à partir du rebase beaucoup plus difficile.