はじめに
この実験では、現在のブランチ内に特定の Git コミットが存在するかどうかを判断する方法を学びます。まず、git log コマンドと、コミット履歴を効率的に検索およびフィルタリングするためのさまざまなオプションについて調べます。これには、コミットメッセージを検索する --grep や、作者でフィルタリングする --author などが含まれます。
その後、git branch --contains コマンドを使用して、リポジトリ内のどのブランチに特定のコミットが含まれているかを特定する方法を学びます。この実践的な演習を通じて、異なるブランチ間でプロジェクトのコミット履歴を効果的にナビゲートし、理解するスキルを身につけることができます。
git log を使用してコミットを検索する
このステップでは、git log コマンドを使用してプロジェクトの履歴から特定のコミットを検索する方法を学びます。プロジェクトが拡大し、コミットが増えるにつれて、git log の出力はかなり長くなることがあります。Git は、ログをフィルタリングして検索するための強力なオプションを提供しています。
まず、作業対象となる履歴を作成するために、いくつかのコミットを追加しましょう。~/project/my-time-machine ディレクトリにいることを確認してください。
cd ~/project/my-time-machine
echo "Adding a second message" >> message.txt
git add message.txt
git commit -m "Add a second message"
echo "Adding a third message" >> message.txt
git add message.txt
git commit -m "Add a third message"
次に、再度完全なログを表示しましょう。
git log
最新のコミットが一番上に表示され、合計 3 つのコミットがリストされているのが確認できるでしょう。
時には、コミットメッセージに特定の単語が含まれるコミットを探すことがあります。この場合は -grep オプションを使用できます。「second message」を含むコミットを検索してみましょう。
git log --grep "second message"
このコマンドを実行すると、コミットメッセージに「second message」というフレーズが含まれるコミットのみが表示されます。
もう 1 つの便利なオプションは、特定の作者によるコミットを検索する -author です。セットアップ時に作者名を設定したので、「Jane Doe」によるコミットを検索してみましょう。
git log --author "Jane Doe"
このコマンドを実行すると、「Jane Doe」によって行われたすべてのコミットが表示されます。
最後に、-n オプションを使用して表示するコミットの数を制限することができます。たとえば、最後の 2 つのコミットのみを表示するには、次のようにします。
git log -n 2
これらのオプションを git log とともに使用することで、特に多数のコミットがある大規模なプロジェクトでも、プロジェクトの履歴を効率的にナビゲートすることができます。
git branch --contains をコミットに対して実行する
このステップでは、git branch --contains コマンドの使い方を学びます。このコマンドは、特定のコミットがどのブランチに含まれているかを調べるのに便利です。特に複数のブランチがあり、特定の変更がどこに含まれているかを追跡する必要がある場合に役立ちます。
まず、以前のコミットのコミットハッシュを取得しましょう。git log --oneline を使うと、ログを簡潔に表示でき、コミットハッシュを簡単にコピーできます。~/project/my-time-machine ディレクトリにいることを確認してください。
cd ~/project/my-time-machine
git log --oneline
以下のような出力が表示されます(コミットハッシュは異なります)。
abcdefg (HEAD -> master) Add a third message
hijklmn Add a second message
opqrstu Send a message to the future
最初に作成したコミット("Send a message to the future")のコミットハッシュをコピーします。上の例では、opqrstu です。
次に、このコミットハッシュを使って git branch --contains を実行しましょう。[commit_hash] をコピーした実際のハッシュに置き換えてください。
git branch --contains [commit_hash]
たとえば、上の例のハッシュを使うと、次のようになります。
git branch --contains opqrstu
出力は * master と表示されるはずです。アスタリスク * は現在チェックアウトされているブランチを示しています。これにより、コミット opqrstu が master ブランチに存在することがわかります。
現時点では master ブランチしかないので、出力はシンプルです。次のステップでは別のブランチを作成し、git branch --contains の出力がどのように変化するかを見ていきます。
特定のコミットがどのブランチに含まれているかを理解することは、プロジェクトの履歴を管理し、異なる開発ライン間での作業を調整するために重要です。
他のブランチでテストする
このステップでは、新しいブランチを作成し、そのブランチ上でコミットを行います。これにより、特定のコミットが 1 つのブランチにのみ存在する場合に、git branch --contains コマンドがどのように動作するかを確認します。これを通じて、Git が異なる開発ライン間でコミットを追跡する仕組みをより深く理解することができます。
まず、feature-branch という名前の新しいブランチを作成しましょう。~/project/my-time-machine ディレクトリにいることを確認してください。
cd ~/project/my-time-machine
git branch feature-branch
次に、新しいブランチに切り替えましょう。
git checkout feature-branch
新しいブランチに切り替わったことを示す出力が表示されるはずです。
Switched to branch 'feature-branch'
この feature-branch 上で新しいコミットを行いましょう。
echo "Adding a feature" >> feature.txt
git add feature.txt
git commit -m "Add a new feature file"
次に、git log --oneline を使用してこの新しいコミットのコミットハッシュを取得しましょう。
git log --oneline
出力では、新しいコミットが一番上に表示され、その後に以前のコミットが続きます。「Add a new feature file」コミットのハッシュをコピーしてください。
次に、「Add a new feature file」コミットのハッシュを使用して git branch --contains を実行しましょう。[feature_commit_hash] をコピーした実際のハッシュに置き換えてください。
git branch --contains [feature_commit_hash]
出力は * feature-branch のみが表示されるはずです。これは、この特定のコミットが feature-branch を作成して切り替えた 後 に行われたため、このブランチの履歴にのみ存在するからです。
次に、最初のコミット("Send a message to the future")のハッシュを使用して再度 git branch --contains を試してみましょう。[first_commit_hash] を前のステップで使用したハッシュに置き換えてください。
git branch --contains [first_commit_hash]
今回は、feature-branch と * master の両方が表示されるはずです。これは、feature-branch が master ブランチから作成されたため、その時点で master 上にあったすべてのコミット、最初のコミットを含めて、を含んでいるからです。
これにより、git branch --contains がブランチとそれに含まれるコミットの関係を理解するのにどのように役立つかがわかります。
まとめ
この実験では、Git のコミットが現在のブランチに存在するかどうかを確認する方法を学びました。まず、git log コマンドと、--grep、--author、-n などの様々なオプションを探索し、コミット履歴を効率的に検索およびフィルタリングする方法を学びました。これは、多数のコミットがあるプロジェクトを操作する上で重要です。
その後、git branch --contains コマンドを使用して、特定のコミットが含まれているブランチを特定する方法を学びました。このコマンドは、Git リポジトリ内の異なるブランチ間での変更の伝播を追跡するのに役立ちます。



