Git のコミットがマージコミットかどうかを確認する方法

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Git のコミットがマージコミットかどうかを判断する方法を学びます。コミットの詳細を調べるために git show コマンドを使い、特にマージの重要な指標である親コミットの特定に焦点を当てます。

また、リポジトリの履歴からマージコミットのみを効率的にリストアップするために git log --merges コマンドの使い方も学びます。最後に、これらの方法を非マージコミットに適用してテストし、Git の異なるタイプのコミットを区別する方法を確実に理解します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560056{{"Git のコミットがマージコミットかどうかを確認する方法"}} git/status -.-> lab-560056{{"Git のコミットがマージコミットかどうかを確認する方法"}} git/commit -.-> lab-560056{{"Git のコミットがマージコミットかどうかを確認する方法"}} git/log -.-> lab-560056{{"Git のコミットがマージコミットかどうかを確認する方法"}} end

git show を使って親コミットを確認する

このステップでは、git show コマンドを使ってコミットの詳細を調べる方法を学びます。特に、親コミットに焦点を当てます。親コミットを理解することは、プロジェクトの履歴をたどり、異なるコミットがどのように関連しているかを理解するために重要です。

まず、プロジェクトディレクトリにいることを確認しましょう。ターミナルを開き、my-time-machine ディレクトリに移動します。

cd ~/project/my-time-machine

次に、git log を使ってコミット履歴を表示しましょう。簡潔な表示を得るために --oneline フラグを使います。

git log --oneline

以下のような出力が表示されるはずです(コミットハッシュは異なります)。

a1b2c3d (HEAD -> master) Send a message to the future

これは最初のコミットを示しています。次に、git show を使ってこのコミットの詳細を表示しましょう。git log の出力からコミットハッシュ(a1b2c3d のような短い文字列)をコピーし、以下のコマンドの YOUR_COMMIT_HASH を置き換えます。

git show YOUR_COMMIT_HASH

たとえば、コミットハッシュが a1b2c3d の場合、次のコマンドを実行します。

git show a1b2c3d

出力は非常に詳細で、コミットに関する情報(作者、日付、コミットメッセージ、コミットによって導入された変更など)が表示されます。

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

diff --git a/message.txt b/message.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/message.txt
@@ -0,0 +1 @@
+Hello, Future Me

プロジェクト履歴の最初のコミットでは、出力に "Parent" 行がないことに気づくでしょう。これは、最初のコミットには親コミットがないためです。最初のコミットはプロジェクト履歴のルートです。

後のステップで、コミットが増えたときに、再度 git show を使って親コミットがどのように表示され、履歴がどのようにつながっているかを確認します。このつながりを理解することは、Git が時間の経過とともに変更を追跡する仕組みを理解するための基本です。

git log --merges を実行して確認する

このステップでは、マージコミットについて学び、git log --merges を使ってプロジェクトの履歴からこのタイプのコミットのみを表示する方法を学びます。マージコミットは、異なるブランチからの変更を統合する特別なコミットです。

現在、私たちのプロジェクト履歴は非常にシンプルで、最初のコミットのみが存在します。まだブランチやマージは行っていません。まず、git log --merges を実行してこれを確認しましょう。

~/project/my-time-machine ディレクトリにいることを確認します。

cd ~/project/my-time-machine

次に、以下のコマンドを実行します。

git log --merges

まだマージを行っていないため、このコマンドはおそらく何も出力しません。

これは予想される結果です!git log --merges コマンドは、コミット履歴をフィルタリングし、あるブランチを別のブランチにマージした結果として作成されたコミットのみを表示するように設計されています。

このコマンドの動作を確認するには、新しいブランチを作成し、そのブランチでいくつかのコミットを行い、それをメインブランチにマージする必要があります。ブランチとマージについては、将来の実験で詳しく学びます。

現時点では、git log --merges が、プロジェクト内で異なる開発ラインがいつ、どのように統合されたかを理解するための強力なツールであることを理解することが重要です。これは、複数の人が同時に異なる機能に取り組んでいる共同開発環境で特に有用です。

非マージコミットのテスト

このステップでは、通常のコミット(非マージコミット)を作成し、git log を使って、マージコミット(現時点ではまだないが、将来の実験で作成する予定)と比べて、コミット履歴にどのように表示されるかを確認します。これにより、異なるコミットタイプの理解を深めることができます。

まず、message.txt ファイルに小さな変更を加えましょう。新しい行を追加します。

~/project/my-time-machine ディレクトリにいることを確認します。

cd ~/project/my-time-machine

次に、echo コマンドを使って、ファイルに新しい行を追加します。

echo "Adding another line." >> message.txt

>> 演算子は、ファイルを上書きするのではなく、テキストをファイルに追加します。

ファイルの内容を確認しましょう。

cat message.txt

以下のように表示されるはずです。

Hello, Future Me
Adding another line.

次に、リポジトリの状態を確認しましょう。

git status

message.txt が変更されていることが表示されるはずです。

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Git が私たちの変更を検出しました。次に、この変更をステージングしてコミットしましょう。

git add message.txt
git commit -m "Add a second line to message"

コミットが成功したことを確認する出力が表示されるはずです。

[master a1b2c3d] Add a second line to message
 1 file changed, 1 insertion(+)

次に、git log --oneline を使ってコミット履歴を再度確認しましょう。

git log --oneline

2 つのコミットが表示されるはずです。

e4f5g6h (HEAD -> master) Add a second line to message
a1b2c3d Send a message to the future

最新のコミット(この例では e4f5g6h、実際のハッシュは異なります)が新しい非マージコミットです。これは、master ブランチ上で直接行われた単一の変更を表しています。

再度 git log --merges を実行すると、まだ出力は表示されません。これは、これらのコミットのどちらもマージコミットではないからです。

通常のコミットとマージコミットの違いを理解することは、プロジェクトの履歴を解釈し、他の人と効果的に協力するために重要です。通常のコミットは、単一の開発ライン上の直線的な進捗を表し、マージコミットは異なる開発ラインからの変更の統合を表します。

まとめ

この実験では、Git でマージコミットを識別する方法を学びました。まず、git show コマンドを使ってコミットの詳細を調べ、特に親コミットの有無に注目しました。最初のコミットには親コミットがなく、それ以降のコミットでは親コミットが表示されることがわかりました。

次に、git log --merges コマンドを調べました。これは、リポジトリの履歴からマージコミットのみを一覧表示する直接的な方法です。最後に、これらの方法を非マージコミットに適用して、正しく識別されることを確認し、マージコミットと通常のコミットを区別する方法の理解を深めました。