💬

git diffでブランチ間の変更を確認しよう

2023/05/05に公開

はじめに

こんにちは!

APPRENTICE 1期生 の山中と申します!

Web系の開発会社に転職を目指して、サーバーサイドエンジニアとして学習中です!

今回はGit のgit diffコマンドを利用して、効率的に変更内容を管理する方法を解説していきます。

git diffコマンドとは

git diffコマンドとはGitリポジトリ内で変更されたファイルの内容を比較・表示するために使用されます。このコマンドは、主に以下の3つの場合で利用されます。

  1. ワーキングディレクトリとステージングエリア間の差分を表示する。(省略)
  2. ステージングエリアと最後のコミット間の差分を表示する。(省略)
  3. 2つのブランチ間の差分を表示する。(解説)

1と2に関しては基本的な学習で習得する内容なので、省略します。

3は開発するにあたってブランチ間の変更差分を知りたい場面は多いかなと思いました。そのため今回は3について解説していきます。

また、2つのブランチ間の差分を表示する方法は複数あるので、いくつか紹介していきます。

まずはブランチ、ファイルの準備

事前にブランチ間の変更を比較するために、ブランチ、ファイルの準備をします。(デフォルトはmaster ブランチ)

今回はmasterとfeatureの2つのブランチを利用します。

まず、diff_check.txt ファイルを作成していきます。

touch diff_check.txt 

次に、feature ブランチを作成して切り替えます。

git checkout -b feature

diff_check.txtに入力していきます。

こんにちは。
featureブランチで記入しました。

そして、ステージに追加し、コミットしていきます。

git add diff_check.txt 
git commit -m "featureブランチでコミット"

これで準備は完了です。

1. ブランチ間での変更を比較する

以下のコマンドで変更を比較していきます。

git diff feature master

これにより、両ブランチ間の差分が表示されます。

+が追加された行、-が削除された行を示します。

結果を見ていきましょう。

-こんにちは。
-featureブランチで記入しました。

これはfeatureブランチから見て、削除された行(-)がmasterブランチであることを示しています。

次に、featureとmasterを入れ替えて比較してみましょう。結果が反転しています。

git diff master feature
+こんにちは。
+featureブランチで記入しました。

2. ファイル単位での比較

特定のファイルだけの変更を比較したい場合は、以下のようにファイル名を指定してgit diffを実行します。

git diff feature master -- diff_check.txt

これにより、指定されたファイルのみの差分が表示されます。

今回は変更したファイルが一つのみのため、結果は1と同じになります。

3. 統計情報を表示する

git diffに--statオプションを追加することで、変更されたファイル数や追加・削除された行数を表示することができます。

git diff feature master --stat

結果を見ていきましょう。

diff_check.txt | 2 --
1 file changed, 2 deletions(-)

この行は、1 つのファイル(diff_check.txt)が変更され、その中で 2 行が削除されたことを示しています。

また、featureとmasterを入れ替えた場合は1と同様、結果が反転します。

4. マージ前の変更を確認する

マージ前に変更内容を確認するために、git diffを使って現在のブランチとマージ対象のブランチの差分を表示します。

git checkout master
git diff HEAD feature

これにより、マージする前に変更内容を把握し、コンフリクトや不要な変更を防ぐことができます。

結果を見ていきましょう。

+こんにちは。
+featureブランチで記入しました。

1や2と同様の結果が得られました。現在のブランチから見て比較したいときには、こちらが便利です。

まとめ

git diffを活用することで、ブランチ間の変更を比較し、マージ前に変更内容を把握することができます。

Gitを使って開発を行う際、このような比較方法を習得することにより、効率的に変更内容を管理することができます。これにより、コンフリクトや不要な変更を防ぐことができます。

開発の際は、活用できる場面が今後あると思うので、こちらをテーマにブログ記事として作成させていただきました。

Discussion