GitHubブランチ合併


転載先:http://blog.csdn.net/loadsong/article/details/51591536 に侵入
ローカル2つのブランチのマージ
まず最も簡単な状況から着手する.今プロジェクトは1つのmaster分岐だけあって、私は新しいidea分岐を作って、自分の考えを実現して、commitしてみます.倉庫内の状況はこうです
これは前に見たことがある状況だ.では、ideaのコードをmasterに組み込むにはどうすればいいですか?「融合」(merge)をクリックします.クライアントのBranchesの項目の下で、  Merge View
今、ideaブランチmergeをmasterブランチに入れたいのですが、図の矢印の方向に注意してください.マウスをmasterブランチの一番左側の部分に移動して、マウスが小さな手になったことを知って、masterブランチを右側の空き枠にドラッグして、ideaを左側にドラッグします.
次の点  Merge Branches  ボタンをクリックします.マージに成功しました.masterにはideaのすべてのコードがあります.下位履歴はこうなります.
新しい生成  C5  ,これは「融合バージョン」(Merge Commit)という合併が特殊で、中には一般的に内容が修正されていません.その役割は主に2つの分岐を合併することです.どのように合併したのでしょうか.masterの内容syncをgithub.comに行って、このmerge commitを見てみると、2つのparentがあることがわかります.
mergeの後、masterブランチポインタはmerge commitを指し、ideaブランチの  C3  このバージョンです.ideaブランチは一般的に今すぐ削除できます.
コード競合conflicts
実際にはよくこのような状況がありますが、ideaブランチで比較的大きな機能を開発しています.しかし、この時突然緊急な問題が修復される必要があることを発見したので、masterブランチに直接行って、commitを作ってこの緊急な問題を解決します.それからideaで開発を続けます.
他のケースもありますが、とにかく2つの異なる分岐で並列に開発され、同時に新しいcommitがあります.これは一般的に問題ありません.同じように直接mergeすることができます.以下の図です.
しかし、2つのブランチで同じ場所を変更すると、マージされたコードの競合が発生します. Git どのブランチを聞くべきか分からないので、衝突の位置を報告して、開発者に手動で解決させるしかありません.
具体的には、ideaブランチで、READMEファイルの行を変更します.例えば、  AAA、commit、それからmasterブランチに切り替えて、この行の内容を  BBB  ,同様にcommitをします.これでクライアントに行って、merge viewを開いてideaをmasterに分岐します.操作は直接成功するのではなく、次のコード競合インタフェースが表示されます.
上の図の  Open In External Editor  ボタンをクリックすると、エディタで競合するファイルを開くことができます.次のようになります.
test project for gitbeijing book
<<<<<<< HEAD
BBB
=======
AAA
>>>>>>> idea

上の  HEAD  現在のブランチを代表して、今私に対応している状況はmasterです.だから.  =====  2つの競合コードブロックの境界線です.上のコードはmasterブランチで、下のコードはideaブランチです.競合を解決するには、上の3行の「競合マーカー」をすべて削除し、コードを修正します.その後、クライアントに戻って、2箇所の  Commit to Master  . これで、今回のブランチ合併が完了し、merge commitも生成されます.
マージ分岐は融合(merge)のほかに「変基」(rebase)という形式がありますが、ここではしばらく使えません.
リモートブランチのマージ
今、私の地元の倉庫はcocoと呼ばれています.github.comではこの倉庫を管理しています.では、自然に地元のmasterブランチと遠位のmasterブランチがあります.この2つのブランチは名前はmasterですが、本質的には2つのブランチであり、ブランチの合併の問題もあります.
例えば、github.comのページで、プロジェクトを修正して、修正内容commitをmasterブランチの上に置きます.これにより、遠隔のmasterは私の地元のmasterブランチより1つ多くのcommitをブランチしました.この時、クライアントに着いて、syncボタンをクリックして同期を行い、このcommitは直接私の地元に引き寄せられます.これは前述のことです.
もう1つの場合、syncがない前に、私自身もローカルでcommitをしました.つまり、ローカルのmasterと遠位のmasterが並列開発された場合、このような状況は非常によくあります.この時、syncを実行すると、何が起こるのでしょうか.
操作してください.私は自分でgithub.comの上に行って、cocoプロジェクトを開いて、remoteというファイルを追加します.それからローカルにもlocalというファイルを追加して、commitを作ります.このようにsyncを実行して、ローカルの2つのブランチの合併と同じで、一般的にmerge commitを生成して、ローカルクライアントとgithub.comの履歴線で見ることができます..
特定の条件の下で、点syncボタンの2つのブランチの合併は融合(merge)方式を使用しないで、“変基(rebase)方式を採用して、このように最終的に1つのmerge commitを生成することはできません.しかし達成した効果は同じで、2つのブランチコードの合併を実現して、衝突を処理する方式も同じで、だからしばらく深く研究する必要はありません.
まとめ
前はどのように分岐するかを学んで、今日またどのように分岐を合併するかを学んで、その分岐の基本的な操作はできました.後は実際の開発状況の中で運用しました.