はじめに
この実験では、Git のコミットがマージコミットかどうかを判断する方法を学びます。コミットの詳細を調べるために git show
コマンドを使い、特にマージの重要な指標である親コミットの特定に焦点を当てます。
また、リポジトリの履歴からマージコミットのみを効率的にリストアップするために git log --merges
コマンドの使い方も学びます。最後に、これらの方法を非マージコミットに適用してテストし、Git の異なるタイプのコミットを区別する方法を確実に理解します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Git のコミットがマージコミットかどうかを判断する方法を学びます。コミットの詳細を調べるために git show
コマンドを使い、特にマージの重要な指標である親コミットの特定に焦点を当てます。
また、リポジトリの履歴からマージコミットのみを効率的にリストアップするために git log --merges
コマンドの使い方も学びます。最後に、これらの方法を非マージコミットに適用してテストし、Git の異なるタイプのコミットを区別する方法を確実に理解します。
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
コマンドを調べました。これは、リポジトリの履歴からマージコミットのみを一覧表示する直接的な方法です。最後に、これらの方法を非マージコミットに適用して、正しく識別されることを確認し、マージコミットと通常のコミットを区別する方法の理解を深めました。