概要
自分が与えれたタスクをいったん終わると$ git push
してプルリクを送り、レビューを行ってもらうことが一般的な開発フローである。共同開発をしている場合、developブランチは更新される可能性があり、自身の作業ブランチに更新されたdevelopブランチを反映する必要がある。その際、自分が変更したソースコードに対して誰かが変更を加えていた場合、コンフリクトが生じる。自身のソースコートに対して、developブランチを反映し、コンフリクトが生じた場合、コンフリクトを解消して、プルリクを送る方法を考える。今回は、rebaseを用いてソースコードを反映する方法を考える。
想定の状況
- featureブランチを切った時(作業を開始する際)
B' feature
/
A---B develop
- プルリクエスト送る時(作業が終わった時)
B'---C---D feature
/
A---B---E---F develop
手順
1. リモート追跡ブランチの更新
$ git fetch
2. developブランチの変更箇所を自身のfeatureブランチに反映
$ git rebase origin/develop
3. コンフリクトが生じた場合(生じなければスキップ)
3.1 どちらのコードを採用するのかをしゅどうで選択する
<<<<<<< HEAD
# featureブランチでの変更内容
・・・
=======
# developでの変更内容
・・・
>>>>>>> develop
この際、<<<<<<< HEAD
,======
,>>>>>>>> develop
も手動で削除してもらっても大丈夫である。
3.2 $ git add .
3.3 $ git rebase --continue
ここで、コミットメッセージの編集する画面になるときがありますが、通常で特に変更する必要はないと思います。書き換える必要がある場合は適宜編集してください。
コンフリクトがすべて解消されるまで3.1~3.2を繰り返す。
すべてのコンフリクトがなくなるとコミット履歴は以下のようになる。
C'---D' feature
/
A---B---E---F develop
4. ローカルリポジトリをリモートリポジトリに反映
$ git push
5. プルリクエストの作成
GitHub等でプルリクエストを作成します。
6. マージしてもらう
プルリクエストが承認されマージされたら、コミット履歴は以下のようになる。
A---B---E---F---C'---D' develop
最後に
今回は、rebaseを用いてやる方法について述べた。
間違っている個所があればコメントしていただけると幸いです。
参考