質問: `sampleディレクトリ`の中の`sample.txt`というファイルがあったとします。`sampleディレクトリ`に移動して`master`ブランチにて`sample.txt`にhello masterと書いてaddしてcommitした後に、`develop`ブランチを作成しcheckoutします。`develop`ブランチではhello developと書いてaddしてcommitして、masterブランチにチェックアウトしました。masterブランチにdevelopブランチの内容を取り込もうとして`git merge develop`とやって見ればコンフリクトしますよね。 これは、`sample.txt`というファイルの変更がmasterブランチとdevelopブランチ二つで行われているために、どっちをマージしていいかわからず起こる衝突ですよね。ていうことは、マージの使い所って、`develop`ブランチに移動して例えば`sampleディレクトリ`の中に`Newsample.txt`というファイルを作成して、それをmasterに取り込むって使い方しかできないってことですよね。 仮にdevelopブランチの状態が `master + (coomit) + (commit) + (commit)`だったとしてdevelopブランチの変更をmasterブランチにコンフリクトせずにマージを行いたければ`master`ブランチの状態が`master - (developのcoomit) - (developのcommit) - (developのcommit)`という状態になければいけない。 `develop`ブランチで作業してる間に`master`ブランチに変更が加えられてcommitされていた場合、その時点で`master`ブランチの状態は`master -(developのcoomit) - (developのcommit) - (developのcommit)`ではなく、全く新しいmasterに生まれ変わってるので、`master`ブランチにいる時にdevelopブランチをマージしたらコンフリクトが起こるってことですよね。 あんまり、便利なコマンドではないなと思ったんですが、どう思われますか
回答: こんにちは。 複数の人が複数のファイルをメンテナンスしている状況を想像して下さい。 結構よくあることですね。 Aさんがファイルaの100-200行目を修正し、Bさんが同じファイルaの500-510行目を修正した場合、修正がこれだけなら、マージでコンフリクトしません。 このような修正をAさんとBさんがそれぞれ独立に多数のファイルに対して行っていた場合、両方の変更点を「マージ」する手作業は地獄ですし、そもそも間違いの元です。 確かにコンフリクトした場合だけは自動化できませんが、そうでない限り自動でマージしてくれるって本当に幸せなことだと思います。