Gitのコンフリクト時にmergetoolで確認してマージするヘ(^o^)ノ
Gitでコンフリクトしたときに、GUIやIDEだと差分が確認しやすいみたい。
でも、僕は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
- 左はマージする前の状態
- 右はマージしたいところ
- 中央は右のマージしたいところが作られる前の状態
- 下はマージして保存するファイル
どうですか?
今の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٩( ‘ω’ )و