質問: あらかじめある程度、開発が進んでる一つのアプリケーション、プロジェクトがあり、そのリモートリポジトリのブランチは以下のような構造になっていたとします。この各々のブランチにはindex.html、index2.html、index.cssの3つのファイルがあるとします。 ``` master develop develop_UI develop_Layout ``` 基本的にmasterはいじらず、developを太い幹と考え、各々そこからブランチを切って実装し、developに最新の機能等をマージしているとします。 僕はこのプロジェクトに途中から参加するとしてまずgit cloneをしてローカルにそのレポジトリやプロジェクトの内容をローカルに複製したとします。そしてそのあと `git checkout develop`でdevelopブランチに切り替えるとします。 ここで僕はクローンされたdevelopブランチ内のindex.htmlファイルとindex.cssファイルが気に食わなかった為、cloneする以前にローカルで作成していたindex.htmlとindex.cssファイルをワークツリー内でcloneしてきた同名のファイルと置き換えたとします。 そしてdevelopブランチの内容は最新のままであるためpullをせず、そのまま`git add .`、`git commit -m "ファイルをまるごと変更"`、`git push develop`を行いリモートのdevelopとします。 この時普通にpush出来るものなのでしょうか? 普通にプッシュ出来るとは思いつつ、何か競合のようなモノが起きそうで怖いのですが。。。宜しくお願い致します。 *追記 仮にプッシュ出来たとしてdevelopブランチの内容(index.html、index.css)書き換わっていると思います。 develop_UIブランチでindex2.htmlを編集していた人はdevelopブランチにindex2.htmlの変更をマージしたいとします。 その場合ローカルで`git checkout develop`を行いdevelopブランチに切り替え `git merge develop_UI`などとすれば、マージ出来るとは思うのですが、index.html、index.cssの内容が僕により書き換わっているので、無事マージ出来るのかも気になります。宜しくお願い致します。
回答: こんにちは。 まず、どんなに破壊的な内容であろうと devブランチの先頭であればプッシュできます。 次に、devブランチとのマージですが 同ファイルの同一行への変更を複数人がした場合、 マージする際にコンフリクトが起きます。 どちらの行を採用すればいいかgitに判断できないからです。 この場合は人間が取捨選択して手動でマージすることになります。 この動作はgitの基礎です。納得がゆくまで 自分でリポジトリを作って試すことをおすすめします。