質問: 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ブランチをマージしたらコンフリクトが起こるってことですよね。 あんまり、便利なコマンドではないなと思ったんですが、どう思われますか
回答: ようこそGitの世界へ! > > マージの使い所って、developブランチに移動して例えばsampleディレクトリの中にNewsample.txtというファイルを作成して、それをmasterに取り込むって使い方しかできない > > > ご質問を拝見して 質問者様が一つ認識違いをしているのかなと思ったことは、 衝突が発生=マージができない。 ではないです。 衝突が発生したあとに、衝突を解消することでマージを完了することができます。 マージでの衝突を解決する たとえ同じファイルで似たような修正をしたとしても、 マージ作業でどちらかをコミットすることもできますし、逆に全く違う内容でコミットすることもできます。 ※質問が編集されたので追記 > > masterブランチにコンフリクトせずにマージを行いたければ > > > コンフリクトせずにマージをすることは並行開発する上では不可避です。 もちろん、常に関係者がコミュニケーションをとって、Git上でコンフリクトが起こらないように調整しながら開発することも可能ではありますが、それはあくまでGit上でコンフリクトが発生していないだけでプロジェクト上ではコンフリクトが起きています。