私は中間の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
トリックを行いますが、私が避けたいマージコミットを引き起こします。私は、メッセージが述べていることを懸念してるfeature -> feature
のではなく、feature -> origin/feature
これは単にプレゼンテーションものになるかもしれませんね。
私は何かを見逃しているのですか、それとも完全に間違った方法でこれを行っていますか?リモートサーバーでリベースを実行することを回避することは重要ではありませんが、リベースからのマージの競合を修正することがはるかに困難になります。