bitbucketを使用していますが、gitのリベース機能を使用しているときに問題が発生しています。要するに、私がrebaseするたびに既に適用した変更を再適用する必要があります。私は以下の手順で問題を再現しました。その単純化されたバージョンが、結果は同じでした。リベースでgitワークフローを正しく使用するにはどうすればよいですか?
- デベロッパーAはgit repoを作成し、
contributors.txt
をmaster
に追加し、コミットしてプッシュします。今master
にはcontributors.txt
ファイルがあります。ファイルの内容は、Developer A
master
からbranch-a
を作成します。master
からbranch-b
を作成します。- 開発者Aは寄稿者ファイルを
branch-a
に追加します。Developer A Developer A2
- 開発者Bは、貢献者が開発者Aがコミットし、コミットリモート
branch-a
- 開発者Bに変更をプッシュし、リモート
branch-b
への変更をプッシュDeveloper A Developer B
- よう
branch-b
でそうに見えるファイルを追加します。 - デベロッパーAは
branch-a
とmaster
をマージします。 - 開発者Bはマスタをチェックアウトしてプルするので、ローカルマスタは上記の手順8で説明したマージによって適用された変更で更新されます。
- 開発者Bは
branch-b
をチェックアウトし、git rebase master
- 開発者Bは、マージ競合を取得しません。開発者Bが固定紛争を追加する
git add
を行い、git rebase --continue
を実行します - 開発者Bは、マージ競合を修正します。すべてうまくいく。
- デベロッパーBが
branch-b
をプルすると、ローカルとリモートのbranch-b
がマージする必要があります。 (プルする前に設定する必要があります) - 開発者Bはマージ競合を解決しました。ローカル
branch-b
はマスターからの変更を持ち、リモートにプッシュできます。 - 開発者Bは
branch-b
をリモートにプッシュします。git push origin branch-b
を使用してください。すべてうまくいく。 - 開発者Bは
branch-b
に新しいファイルを作成し、コミットします。 - 開発者Bは、ありません
git checkout master
git pull
(それが最後のプルすなわちステップ以降変更されていないので、マスターは最新のものである9)git checkout branch-b
git rebase master
- とき
git rebase master
が実行されると、gitは開発者Bに同じ競合をもう一度解決するように要求します。なぜこれが起こるのですか?既に適用されている変更を知ってはならず、再度適用する必要はありませんか?
Developer A Developer A2 Developer B
のようなファイルが今見えるよう
私はこの問題を解決するためにリベースの代わりにマージを使うことができると思います。しかし、私は誤ってリベースを使用しているようです。私が間違っていることを教えてください
私は解決策を理解しています。しかし、この問題については不明です。ステップ13を正常に完了すると、origin/branch-bがマスターの上にリベースされませんか? – ysfiqbl
ローカルブランチ-bはリベースされていますが、リベース後に何もプッシュされなかったため、origin/branch-bはありません。だからあなたが押してもまだマージの競合があるのです。 プッシュを強制的に実行すると、origin/branch-bがリベースされたバージョンに置き換えられます。 –
ありがとうございました。今は完璧な意味合いがあります。私はこの代わりに私が従うべき別のワークフローがありますか?私はリベースを使用したいのかと思いますが、これを行う方法です。 – ysfiqbl