げんきちの秘密基地

エンジニアリングが世の中の思いを実現してきた歴史に気づき、29歳未経験からWEBエンジニアとして転生!【Danger】綺麗事を割と本気で言ってきます【GitHub】https://github.com/0840kg【Twitter】https://twitter.com/0840kg

Gitのmerge.conflictStyle の値を diff3 に設定するメリットとは?

ぞす!げんきちです!\\\\٩( 'ω' )و ////

 

「いや、誰だよ」って方は、下記リンクを見てやってください。

  1. はじめまして!げんきちです! - げんきちの秘密基地

  2. 僕がエンジニアになりたい理由 - げんきちの秘密基地

目次〜

f:id:Genkichi:20190318213814p:plain

 

merge.conflictStyle の値がデフォルトの merge の場合

マージコンフリクトは以下のように生じます。

 

<<<<<<< HEAD
テストでござる。
=======
テストだよ。
>>>>>>> master

 

「テストだよ。」と「テストでござる。」どっちにしますか?状態です。

 

自分1人で開発している場合は、当然「テスト1」と書いた意図も自分で分かっている訳なので、このデフォルト設定でも支障はありません。

 

しかし、チーム開発などで、自分以外のメンバーが書いたコードとのコンフリクトであった場合には、ちょっと事情が変ります。

本人に確認するまでそのコードの意図を正確に汲むことができません。

 

 merge.conflictStyle の値を diff3の場合

そこで、以下のようにコンフリクトの設定を変更します。

 

【ターミナル】

git config --global merge.conflictStyle diff3

 

そうすると、以下のようになります。

 

<<<<<<< HEAD
テストでござる。
||||||| merged common ancestors
テストだお。
=======
テストだよ。
>>>>>>> master

 

ancestorsは「祖先」という意味らしいです。

つまり、masterとHEADの共通祖先のコミット情報を確認できるようになりました!

 

上記の例であれば、チームの開発メンバーは、

 

「テストだお。」を「テストだよ。」に変更した

 

という変更の経緯を確認することができます。

 

       D <--hoge <--HEAD
      /
       /
A --- B --- C <-- master

 

merge.conflictStyle の値を diff3 に設定すると得られるメリット

このようにマージコンフリクトを解決する際に, マージするブランチ同士の共通祖先の内容を確認することができると、

 

このブランチのこの内容は元からあったものなのか

修正されたものなのか

それとも新しく追加されたものなのか

 

といったより詳しい情報を得ることができます。

 

デフォルトの merge ですと, マージする 2 つのブランチの先端の違い, 比較にとどめられます 。

その違い、 競合がどのような経緯で発生したのかということまではわかりません。

 

ばんざい!\(^o^)/

 

<一日一新>

セブンイレブン えびちりマン。ちょっと高いけど、おいしいー。

 

<学習進捗>

学習開始からの期間 :97日
今日までの合計時間:948h
今日までに到達すべき目標時間:883h
目標との解離:65h
10,000時間」まで、

 

残り・・・9,052時間!」

 

以上です。

読んでくれた方々、ありがとうございました!((_ _ (´ω` )ペコ。

genkichi.hateblo.jp

genkichi.hateblo.jp

 

f:id:www08056561815:20190224095507g:plain

twitter.com