「Gitの基礎 - rebaseとmergeの使い分け」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
92行目: 92行目:


== mergeを使用して統合する ==
== mergeを使用して統合する ==
topicブランチで機能を開発する間に、他のチームメンバによってmasterブランチがいつくか先に進んでいるとする。<br>
下図のように、topicブランチで開発する間において、masterブランチのコミットが先に進んでいるとする。<br>
このまま、materブランチにtopicブランチをmergeすると、コンフリクト(競合、衝突)が発生する。<br>
この時、materブランチにtopicブランチをmergeすると、コンフリクト (競合、衝突) が発生する。<br>
[[ファイル:Git Merge Rebase 1.png|フレームなし|中央]]
<br>
<br>
masterブランチ上でコンフリクトを解決するのは好ましくない。なぜなら、解決の結果が正常に動作するかどうか実証する必要があるからである。<br>
しかし、masterブランチ上でコンフリクトを解決するのは好ましくない。<br>
そこで、コンフリクトの解決の実証をローカルのtopicブランチで行うため、masterブランチ側の変更をtopicブランチに取り込む。<br>
これは、解決の結果が正常に動作するかどうか実証する必要があるからである。<br>
(ここで、コンフリクトを解決したものとする)<br>
<br>
<br>
次に、このtopicブランチの変更をmasterブランチに取り込む。(masterブランチをチェックアウトする)<br>
そこで、まず、コンフリクトの解決の実証をローカルのtopicブランチで行うため、masterブランチ側の変更をtopicブランチにmergeする。<br>
そして、topicブランチをmergeする。(この場合、--no-ffオプションを付加しない限りは、fast forward mergeになる)<br>
topicブランチに取り込むことにより、コンフリクトを解決する。<br>
これで、topicブランチのコミットと完全に同一のコミット(sha-1が同じ)が、masterブランチのコミットとして記録される。<br>
<br>
<br>
ここでは、masterブランチへの最終mergeを自分で行ったが、チーム開発に於いては、masterブランチの管理者に対してプルリクエストを送る場合もある。<br>
次に、masterブランチをチェックアウトして、topicブランチの変更をmasterブランチにmergeする。<br>
この時、--no-ffオプションを付加しない限りは、fast forward mergeとなる。<br>
<br>
これにより、topicブランチのコミットと完全に同一のコミット (sha-1が同じ) が、masterブランチのコミットとして記録される。<br>
<br>
チーム開発の場合、masterブランチへの最終マージにおいては、masterブランチの管理者に対してプルリクエストを送信して実施してもらう場合もある。<br>
<br><br>
<br><br>


案内メニュー