Unityのうんたら

×
ブランチで作業したコミット(成果)を取り込んで統合する処理です

マージは現在のブランチに対して行われ、どのブランチのコミットを統合するか指定します

ブランチまでは、すんなり頭に入ってきましたが、マージ、リベースあたりから何かモヤモヤしてきます このあたりが Git の難しさでしょうか?

ここでは3つのブランチ(master, develop1, develop2)に枝分かれしたものをマージしてみます



マージボタンをクリックすると統合するコミットの選択ダイアログが表示されます



現在のブランチ(develop1)に develop2 のコミットをマージしてみます

ちなみに同じ位置にメッセージを追加したのでコンフリクトが発生するはずです



予想通りコンフリクト発生です



コンフリクトした部分が、コミットされていない変更 となっています

コンフリクトは、マージするブランチ間で同じ場所を修正していた場合に発生します

<<<<<<< HEAD から ======== という行までが現在のブランチの情報で、

======== から >>>>>>> XXXXXXXXXX までがマージするブランチの情報です

修正してコミットすればマージが終了します

今回は単純な同一箇所のメッセージ追加のコンフリクトなので、エディターで修正しますが、外部のマージツール等で修正してコミットしてもOKです



マージ後の状態

develop1ブランチにマージコミット(develop2コミットの取り込み)が行われますが、develop2ブランチは、閉じるわけではなく何も変わりません。このまま develop2 へコミットすれば develop1 とは別のブランチとして管理されていきます

樹形図(コミットグラフ)はゴチャゴチャした表示となりますが、コミット履歴がブランチを含めて残っていく基本的な統合方法です

リベース

マージと同じようにブランチを統合するのにリベースというコマンドもあります

先ほどのマージコミットを削除して同じ状態に戻してから、現在のブランチ(develop1)に develop2 のコミットをリベースしてみます

マージボタンをクリックしてダイアログを表示させます

リベースで統合する develop2 のコミットを選択します

オプションの マージの代わりにリベースする をチェックしておきます



今回も同じ位置にメーッセージの変更があるのでコンフリクトが発生です





コンフリクト部分をエディターで修正してコミットします



継続します



樹形図(コミットグラフ)は再構築されてスッキリしました

但し、ブランチされていたという履歴が改変されてしまいます

リベース後の状態

Develop1 ブランチに develop2 のコミットが挿入されます
develop2ブランチは、ブランチ上にあったコミットが develop1 ブランチに取り込まれ、基点が変わりブランチ名だけが残っている状態です。

よく見ないと何が起こったのかわかりません (^_^;)

基本的にはリモートブランチと統合する場合はマージを使用するのが鉄則です

リベースは、まだプッシュしていないローカルブランチの範囲で使用しましょう

※複数人でバージョン管理を利用している場合は、リベースでリモートリポジトリに統合すると思わぬトラブルの元となるので注意

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー













【メニュー編集】

メンバーのみ編集できます

広告募集中