差分を確認する

差分を確認するには「P4merge」というソフトが便利なので、この記事ではp4mergeを使った差分の確認方法を説明しています。ファイルの差分を確認する機会はいっぱいあり、比較対象も様々です。

また、ローカルリポジトリ内でのマージにコンフリクトが発生した場合は、エディタを使用するよりもp4mergeの方が簡単にコンフリクトを解消できます。

p4merge のインストール方法

  1. 公式サイトからダウンロードしてインストールします。インストール時に関連するソフトをインストールするか問われますが、「Merge and Diff Tool (P4Merge)」のみを選択して問題ないです。
  1. Git Bashでp4mergeを起動できるようにGitの設定ファイルを開きます。
code ~/.gitconfig
  1. 以下の設定を追記して保存します。
[merge]
    keepBackup = false;
    tool = p4merge
[mergetool "p4merge"]
    path = C:/Program Files/Perforce/p4merge.exe
    cmd = \"C:/Program Files/Perforce/p4merge.exe\" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
    trustExitCode = false
    keepBackup = false
[difftool]
    prompt = false
[mergetool]
    prompt = false
  1. 今後作業する中で文字化けする場合は「Edit > Preferences > Character encoding」でUnicodeを選択してください。

ワーキングディレクトリとステージングエリアの差分を確認する

addコマンドで一度ステージングエリアに追加したファイルに、ワーキングディレクトリで追加の編集を加えた場合の差分の確認する方法です。--でファイル名を指定することで特定のファイルのみの差分を確認できます。

git difftool
git difftool -- file.txt

※ステージングエリアに何もない場合はローカルリポジトリの最新コミットと比較されます

ワーキングディレクトリとローカルリポジトリの差分を確認する

ワーキングディレクトリと最新コミットの差分を確認します。

git difftool HEAD

ステージングエリアとローカルリポジトリの差分を確認する

commit準備ができている状態のステージングエリアと最新コミットの差分を確認します。

git difftool --staged HEAD

コミットとコミットの差分を確認する

コミットとコミットを比較するときはコミットIDを入力します。
最新のコミットはコミットIDの代わりにHEADを入力できます。最新のコミットの親はHEAD^、親の親はHEAD^^です。親が複数ある場合はHEAD^1HEAD^2のように指定します。

git difftool 比較元コミットID 比較先コミットID

ブランチとブランチの差分を確認する

ブランチとブランチを比較するときはブランチ名を入力します。git branchでブランチ名を確認できます。

git difftool 比較元ブランチ名 比較先ブランチ名

# リモートリポジトリとローカルリポジトリの差分も確認可能
git diff origin/main main

TagとTagの差分を確認する

git difftool 比較元タグ名 比較先タグ名

マージコンフリクトの解決

  1. マージ先となる親ブランチに移動します。
git checkout main
  1. マージしようとするとコンフリクトが発生します。
git merge マージするブランチ名
  1. コミットの関係図を一応確認します。
git log --oneline --all --graph
  1. p4mergeでコンフリクト部分の編集画面を開きます。
git mergetool
  1. コンフリクト部分ごとに採用する内容をクリックして選択します。複数のコンフリクトがある場合は矢印ボタンで移動します。
  1. 編集が終わったら保存し、p4mergeを閉じます。
  1. コンフリクト解消前のバックアップファイル.origを削除します。毎回削除するのが面倒くさい人は.gitignoreに追加しておくとよい(この記事参照)。
rm ファイル名

# まとめて削除する場合(-nで削除対象確認、-fで削除)
git clean -n
git clean -f
  1. 変更点をaddしてcommitすることでマージが完了します。