gitで同一ファイルを複数人で編集した場合の衝突
受付中
回答 1
投稿
- 評価
- クリップ 2
- VIEW 9,915
gitで同一ファイルを複数人で編集した場合の衝突について質問です。
a.phpには既存コードが100行載っているとします。
a.phpをAさんがブランチhogeで編集していて、コードを1行目から100行目まで追加し、git commitしました。
同時にa.phpをBさんがブランチtestで編集していて、50行目のコードを改修し、git commitしました。
CさんがAさんのソースをマージしたく、masterブランチからgit merge hogeしました。その後、Bさんが改修してくれたソースをマージしたく、masterブランチからgit merge testを実行しました。このgit merge testは衝突でエラーになりますか?また、衝突させずに済む方法があれば教えてください。
a.phpには既存コードが100行載っているとします。
a.phpをAさんがブランチhogeで編集していて、コードを1行目から100行目まで追加し、git commitしました。
同時にa.phpをBさんがブランチtestで編集していて、50行目のコードを改修し、git commitしました。
CさんがAさんのソースをマージしたく、masterブランチからgit merge hogeしました。その後、Bさんが改修してくれたソースをマージしたく、masterブランチからgit merge testを実行しました。このgit merge testは衝突でエラーになりますか?また、衝突させずに済む方法があれば教えてください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
このgit merge testは衝突でエラーになりますか?修正した内容によります。
修正した箇所が重複していなければ衝突せずにマージできますし、さもなくばマージできない場合があります。
衝突させずに済む方法があれば教えてくださいマージストラテジーを使用すれば、衝突を回避することはできます。
https://git-scm.com/docs/git-merge
# 衝突したら、"our version"(たいていの場合、カレントブランチのこと)の内容を優先してマージする
git merge -s ours test
# "ours"オプションの逆
git merge -s theirs test
ただし、これは衝突の内容を一切考慮せず、機械的にマージするだけなので、
マージした結果が期待通りになるとは限りません。
テスト用ブランチを作成してテストしてみる
以下のようにすれば、masterブランチに一切影響を与えず、masterブランチへのマージのテストを行なうことができます。# masterブランチからマージテスト用ブランチを作成し、そこにチェックアウトする。
git checkout -b merge_test master
# merge_testブランチにhogeブランチをマージする
git merge hoge
# merge_testブランチにtestブランチをマージする
git merge test
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/11/03 17:16
具体的にいうと、今回の例では、git merge hogeした時点のmasterの50行目はAさんの追加したソースコードでBさんのブランチの50行目は明らかに異なるソースになるはずです。しかし、それが衝突しない場合があるということは、gitがただ機械的に行番号だけの比較で衝突を検知しているとは思えないという判断になるからです。
「修正した箇所が重複していなければ衝突せずにマージできます」とおっしゃっていますが、それはBさんが修正した箇所(50行目)をAさんがいじっている場合でしょうか。
例:masterのソース(計200行)の150行目(testブランチの50行目に該当)が$a = 10;
testブランチのソースの50行目が$a = 0;(Bさんの編集によって10から0へ編集された)
上の例は衝突しますか?
2015/11/03 17:27 編集
ご質問の内容ですと修正箇所は重複していないようですし、
gitは行番号だけを見ているわけではないので理論的には衝突せずマージできそうですが、
私の経験では、(追加も含む)修正した行が多いと、衝突していない箇所を"衝突"と誤検知することがありましたので。
実際にこのような状況でお困りなのでしたら、
テスト用のブランチを作成して実際に試してみるのが安全かつ確実です。
回答にコマンドを追記させていただきます。
2015/11/03 17:34