gitを使用し、masterブランチとdeveloperブランチがあります。新しい機能を追加してから、コミットをマスターにリベースし、マスターをCIサーバーにプッシュする必要があります。
問題は、リベース中に競合が発生した場合、リベースが完了した後、リモートブランチをプルするまで、(Github上の)リモート開発者ブランチにプッシュできないことです。これにより、コミットが重複します。競合がない場合、期待どおりに動作します。
質問:リベースと競合の解決後、重複したコミットを作成せずにローカルおよびリモートの開発ブランチを同期するにはどうすればよいですか
セットアップ:
// master branch is the main branch
git checkout master
git checkout -b myNewFeature
// I will work on this at work and at home
git push origin myNewFeature
// work work work on myNewFeature
// master branch has been updated and will conflict with myNewFeature
git pull --rebase origin master
// we have conflicts
// solve conflict
git rebase --continue
//repeat until rebase is complete
git push origin myNewFeature
//ERROR
error: failed to push some refs to 'git@github.com:ariklevy/dropLocker.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
// do what git says and pull
git pull origin myNewFeature
git push origin myNewFeature
// Now I have duplicate commits on the remote branch myNewFeature
編集
だからこれはワークフローを壊すように聞こえます:
myNewFeatureに取り組んでいるdeveloper1 hisNewFeatureに取り組んでいるdeveloper2はどちらも主ブランチとしてmasterを使用しています
developer2はmyNewFeatureをhisNewFeatureにマージします
developer1はリベースし、競合を解決してから、myNewFeatureのリモートブランチへのプッシュを強制します
数日後、developer2はmyNewFeatureを再びhisNewFeatureにマージします
これにより、他の開発者はdeveloper1を嫌いますか?
force
ため、以下にリストされているような処理(プッシュ)が必要になる可能性があります
rewriting history
、それはaですrebase
we
?あなたはあなた以上のチームにいますか?they
(私よりも多くのことを知っている人たちに)コードを共有する場合は、使用すべきではないと言うrebase
。なぜあなただけやっていないgit pull
とgit merge
?