はじめに
この実験では、Git のブランチが別のブランチと同期しているかどうかを確認する方法を学びます。これは、プロジェクトの履歴を管理し、ブランチが最新の状態に保たれていることを確保するための基本的なスキルです。
これを達成するための 3 つの異なる方法を探索します。git log を使用してコミット履歴を比較する方法、git diff を使用してブランチ間の差分を特定する方法、そして最後に git merge-base を使用してブランチ間の関係を検証する方法です。この実験の終わりまでに、Git ブランチの同期状態を自信を持って判断するための実用的なテクニックを身につけることができるようになります。
git log を使用してコミットを比較する
このステップでは、git log コマンドを使用して、プロジェクトの履歴にある異なるコミットを比較する方法を学びます。これは、タイムマシンの異なるスナップショットを見て、それらの間で何が変化したかを確認するようなものです。
まず、プロジェクトディレクトリにいることを確認しましょう。ターミナルを開き、my-time-machine フォルダに移動します。
cd ~/project/my-time-machine
次に、新しいファイルを作成してコミットしましょう。これにより、最初のコミットと比較するための別の履歴ポイントが得られます。
echo "This is the second message." > second_message.txt
git add second_message.txt
git commit -m "Add a second message file"
コミット後、以下のような出力が表示されるはずです。
[master a1b2c3d] Add a second message file
1 file changed, 1 insertion(+)
create mode 100644 second_message.txt
これで、履歴に 2 つのコミットがあります。再度ログを表示してみましょう。
git log
最新のコミットが一番上に表示される 2 つのコミットエントリが表示されます。各コミットには一意の識別子(長い文字列)があります。
2 つの特定のコミットを比較するには、git log と範囲構文 commit1..commit2 を使用します。これにより、commit1 からは到達できないが、commit2 から到達できるコミットが表示されます。
2 つのコミットのコミット ID を見つけましょう。git log --oneline の出力から短い ID を取得できます。たとえば、最初のコミット ID が a1b2c3d で、2 番目のコミット ID が e4f5g6h の場合、それらの ID を使用します。
git log --oneline
出力例:
e4f5g6h (HEAD -> master) Add a second message file
a1b2c3d Send a message to the future
では、最初のコミット (a1b2c3d) と 2 番目のコミット (e4f5g6h) の間のプロジェクトの状態を比較しましょう。例の ID を実際のコミット ID に置き換えてください。
git log a1b2c3d..e4f5g6h
このコマンドは、ID が a1b2c3d のコミット 以降 から、ID が e4f5g6h のコミットまで(このコミットを含む)に行われたコミットを表示します。この場合、2 番目のコミットが表示されるはずです。
git log を使用してコミットを比較する方法を理解することは、プロジェクトの履歴を操作するために重要です。これにより、変更の順序を確認し、コードベースの進化を理解することができます。
git diff branch1 branch2 を実行する
前のステップでは、git log を使用して、履歴の異なる部分に存在するコミットを確認しました。今度は、git diff コマンドを使用して、異なる時点間または異なるブランチ間の実際の 変更内容 を確認しましょう。これは、タイムマシンの 2 つのバージョンを比較して、どの部分が追加、削除、または変更されたかを正確に確認するようなものです。
まず、プロジェクトディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
現在、master という 1 つのブランチしかありません。ブランチの比較をデモンストレーションするために、feature-branch という新しいブランチを作成しましょう。ブランチは、新しい機能や実験をメインのタイムライン (master) に影響を与えることなく作業できる別のタイムラインと考えてください。
git branch feature-branch
次に、新しいブランチに切り替えましょう。
git checkout feature-branch
ブランチが切り替わったことを示す出力が表示されるはずです。
Switched to branch 'feature-branch'
この新しいブランチで、message.txt ファイルに変更を加えましょう。
echo "Adding a line on the feature branch." >> message.txt
このコマンドは、message.txt ファイルに新しい行を追加します。
次に、この変更を feature-branch でコミットしましょう。
git add message.txt
git commit -m "Add a line to message.txt on feature branch"
コミット後、以下のような出力が表示されるはずです。
[feature-branch a1b2c3d] Add a line to message.txt on feature branch
1 file changed, 1 insertion(+)
これで、異なるコミット履歴を持つ 2 つのブランチ (master と feature-branch) ができました。master ブランチには最初の 2 つのコミットがあり、feature-branch にはそれら 2 つのコミットに加えて、さっき行った新しいコミットがあります。
git diff を使用して、master ブランチと feature-branch の間の差分を確認しましょう。
git diff master feature-branch
出力には、2 つのブランチ間で異なる行が正確に表示されます。
diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
Hello, Future Me
+Adding a line on the feature branch.
この出力は、message.txt ファイルが異なることを示しています。+ で始まる行は、master ブランチと比較して feature-branch で追加された行を示しています。
git diff を使用することは、プロジェクトの異なるバージョン間または異なるブランチ間で正確に何が変更されたかを理解するために非常に強力です。これにより、マージする前に変更内容をレビューし、特定の変更が行われた場所を特定するのに役立ちます。
q を押して差分表示を終了し、コマンドラインに戻ります。
git merge-base で確認する
このステップでは、git merge-base コマンドを探索します。このコマンドは、2 つのコミット間の最適な共通祖先を見つけるのに役立ちます。これは、2 つの異なるタイムライン(ブランチ)が分岐した時点を見つけるようなものです。
まず、プロジェクトディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
master と feature-branch という 2 つのブランチがあります。feature-branch は master から作成され、その後 feature-branch に新しいコミットが追加されました。これら 2 つのブランチの共通祖先は、feature-branch が作成される直前の master 上のコミットです。
git merge-base を使用して、master と feature-branch の共通祖先を見つけましょう。
git merge-base master feature-branch
このコマンドの出力は、共通祖先のコミット ID になります。これは、feature-branch を作成する前に master ブランチで行った 2 番目のコミットのコミット ID であるはずです。
出力例:
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
(実際のコミット ID はあなたの環境では異なります)
これが実際に共通祖先であることを検証するには、git log --oneline を使用して両方のブランチの履歴を確認し、コミット ID を目視で確認できます。
git log --oneline --graph --all
このコマンドは、すべてのブランチのコミット履歴をグラフィカルに表示します。master と feature-branch の先端から遡って、それらの履歴が収束する場所を見つけることができます。git merge-base で特定されたコミット ID がその収束点になるはずです。
共通祖先を理解することは、特にブランチをマージする準備をしているときに、Git で重要です。Git は共通祖先を使用して、結合する必要がある変更を判断します。
まとめ
この実験では、様々な Git コマンドを使用して、Git のブランチが別のブランチと同期しているかどうかを確認する方法を学びました。まず、git log を使用してブランチ間のコミットを比較し、範囲構文を使ってコミット履歴を表示し、差分を特定する方法を理解しました。これにより、一方のブランチに存在するが他方には存在しないコミットを確認することができました。
次に、git diff コマンドを調べて、ブランチ間の実際の内容の差分を 1 行ずつ確認しました。最後に、git merge-base を使用して 2 つのブランチの共通祖先コミットを見つけ、一方のブランチが他方に完全に含まれているかどうかを判断しました。これらの手順は、Git でブランチの同期を検証する包括的なアプローチを提供します。



