[Git+GitHub] 編集データの競合とmerge

HOME->講習会->プログラミングセミナー->Git+GitHub


共同開発などで複数人で1つのソースコードを編集することがあります.そのような場合に,編集した部分が被ってしまうことがあります.そのような場合には,どちらのソースコードを優先するのかということを決定する必要があります.

目次

編集データの競合
競合データのmerge

編集データの競合

複数台のコンピュータで開発をしていたりすると,pushやpullをするのを忘れて編集してしまう,複数人で開発していたりすると編集した部分が被ってしまうことがあります.このように編集した部分が重なってしまうことを競合といいます.

例えば,VSCodeでpullせずにソースコードを編集しcommit後に変更の同期を行うと以下のような緑と青の帯に囲まれたコードが表示されます.

競合データのmerge

上記の例のように競合が発生した場合には,どちらのコードを有効にするのかを決定して反映させる必要があります.このような動作をmergeといいます.

この動作はコマンド上で行うには厄介なのでVSCodeなどといったGitを操作することができるエディタを用いて行うことをお勧めします(わざわざコマンドでやる人を見たことがありません).

VSCodeの場合は,自身が行った編集が緑色(Current Change)で表示され,リモートリポジトリ上での変更点が青色(Incoming Change)で表示されます.

赤色の枠線で囲まれた部分を見てもらうと,「Accept Current Change | Accept …」と書かれています.この部分で,どちらのコードをmergeするのかを決定します.

・Accept Current Change(現在のコードを有効にする)
・Accept Incoming Change(リモートのコードを有効にする)
・Accept Both Changes(両方のコードを有効にする)
・Compare Changes(コードを比較する)
・Start Live Share Session(共有セッションの開始)

5つ目については,VSCode特有の機能ですので詳しくは説明しませんが,merge動作が行われるのは,5つ目以外すべてになります.コードを見比べて,どちらのコードを反映させるかよく考えてmergeしましょう.また,merge後は必ずcommitしてpushしておきましょう.

今回の例では,1つの部分で競合が発生した場合でしたが大規模な開発では多くの個所で競合が発生します.そのようなときでも,各発生場所ごとにどちらのコードをmergeするかの選択する必要があります.