Subscribed unsubscribe Subscribe Subscribe

Gitのコンフリクト時にmergetoolで確認してマージするヘ(^o^)ノ

Gitでコンフリクトしたときに、GUIIDEだと差分が確認しやすいみたい。

でも、僕はVimなの...

そこでmergetoolですよ!

実際にやってみよう。

# hello.rb
class Hello
  def say
    "Hello"
  end
end

コミットして、ブランチを切ります。

$ git init
$ git add .
$ git commit -m 'first commit'
$ git checkout -b add_name

修正してみます。

# hello.rb
class Hello
  def say(name)
    "Hello #{name}"
  end
end

コミットして、masterブランチへ

$ git add .
$ git commit -m 'add name'
$ git checkout master

わざとコンフリクトさせてみましょう。

マージする前に、masterブランチのファイルを修正します。

# hello.rb
class Hello
  def say
    "Hello!"
  end
end

コミットして、マージします。

$ git add .
$ git commit -m 'add exclamation mark'
$ git merge add_name

コンフリクトしました!

Auto-merging hello.rb
CONFLICT (content): Merge conflict in hello.rb
Automatic merge failed; fix conflicts and then commit the result.

コマンドを実行します。

$ git mergetool
  • 左はマージする前の状態
  • 右はマージしたいところ
  • 中央は右のマージしたいところが作られる前の状態
  • 下はマージして保存するファイル

f:id:murajun1978:20150211004426p:plain

どうですか?

今のmasterブランチの状態と、マージ前の状態とマージしようとしているファイルの状態が

わかりやすいですよね?

masterブランチには'!'が、add_nameブランチにはnameが追加されています。

ファイルを編集して、保存します。

# hello.rb
class Hello
  def say(name)
    "Hello #{name}!"
  end
end

コンフリクトしたときのファイルはhello.rb.origで保存されています。

必要なければ削除して、コミットしましょう。

$ git commit -m 'merge add_name'

これで、コンフリクトのマージ作業が安全に行えそうですね。

Happy Hacking٩( ‘ω’ )و

d(゚Д゚ )☆スペシャルサンクス☆( ゚Д゚)b

Gitコンフリクト解消ガイド(git mergetoolの使い方)