2016-10-05 4 views
1

bitbucketを使用していますが、gitのリベース機能を使用しているときに問題が発生しています。要するに、私がrebaseするたびに既に適用した変更を再適用する必要があります。私は以下の手順で問題を再現しました。その単純化されたバージョンが、結果は同じでした。リベースでgitワークフローを正しく使用するにはどうすればよいですか?

  1. デベロッパーAはgit repoを作成し、contributors.txtmasterに追加し、コミットしてプッシュします。今masterにはcontributors.txtファイルがあります。ファイルの内容は、 Developer A
  2. masterからbranch-aを作成します。
  3. masterからbranch-bを作成します。
  4. 開発者Aは寄稿者ファイルをbranch-aに追加します。 Developer A Developer A2
  5. 開発者Bは、貢献者が開発者Aがコミットし、コミットリモートbranch-a
  6. 開発者Bに変更をプッシュし、リモートbranch-bへの変更をプッシュ Developer A Developer B
  7. ようbranch-bでそうに見えるファイルを追加します。
  8. デベロッパーAはbranch-amasterをマージします。
  9. 開発者Bはマスタをチェックアウトしてプルするので、ローカルマスタは上記の手順8で説明したマージによって適用された変更で更新されます。
  10. 開発者Bはbranch-bをチェックアウトし、git rebase master
  11. 開発者Bは、マージ競合を取得しません。開発者Bが固定紛争を追加するgit addを行い、git rebase --continueを実行します
  12. Developer A Developer A2 Developer B のようなファイルが今見えるよう
  13. 開発者Bは、マージ競合を修正します。すべてうまくいく。
  14. デベロッパーBがbranch-bをプルすると、ローカルとリモートのbranch-bがマージする必要があります。 (プルする前に設定する必要があります)
  15. 開発者Bはマージ競合を解決しました。ローカルbranch-bはマスターからの変更を持ち、リモートにプッシュできます。
  16. 開発者Bはbranch-bをリモートにプッシュします。 git push origin branch-bを使用してください。すべてうまくいく。
  17. 開発者Bはbranch-bに新しいファイルを作成し、コミットします。
  18. 開発者Bは、ありません
    • git checkout master
    • git pull(それが最後のプルすなわちステップ以降変更されていないので、マスターは最新のものである9)
    • git checkout branch-b
    • git rebase master
  19. ときgit rebase masterが実行されると、gitは開発者Bに同じ競合をもう一度解決するように要求します。なぜこれが起こるのですか?既に適用されている変更を知ってはならず、再度適用する必要はありませんか?

私はこの問題を解決するためにリベースの代わりにマージを使うことができると思います。しかし、私は誤ってリベースを使用しているようです。私が間違っていることを教えてください

答えて

1

ステップ13の後、git push origin branch-b --forceを実行できるはずです。これにより、リベースされたバージョンはリモコンのbranch-bにプッシュされ、マスターの上にリベースされているため、問題なくマスターとマージすることができます。

以前の方法の問題は、マスターの上でリベースした後に、マスターの上にリベースされていないorigin/branch-bにマージコミットを追加するだけです。強制プッシュを行うと、リモートブランチがリベースされたブランチに置き換えられます。

+0

私は解決策を理解しています。しかし、この問題については不明です。ステップ13を正常に完了すると、origin/branch-bがマスターの上にリベースされませんか? – ysfiqbl

+0

ローカルブランチ-bはリベースされていますが、リベース後に何もプッシュされなかったため、origin/branch-bはありません。だからあなたが押してもまだマージの競合があるのです。 プッシュを強制的に実行すると、origin/branch-bがリベースされたバージョンに置き換えられます。 –

+0

ありがとうございました。今は完璧な意味合いがあります。私はこの代わりに私が従うべき別のワークフローがありますか?私はリベースを使用したいのかと思いますが、これを行う方法です。 – ysfiqbl

関連する問題