はじめに
🧑💻 Git や LabEx が初めてですか?Quick Start with Git コースから始めることをおすすめします。
Git は開発者がコードベースに加えられた変更を追跡できる強力なバージョン管理システムです。Git の最も便利な機能の 1 つは、特定の日付範囲内のコミットを表示する機能です。これは、バグを特定したり、プロジェクトの履歴を理解したりする際に役立ちます。
Git リポジトリのクローン
Git の日付範囲フィルタリング機能を調べ始めるには、まず作業対象の Git リポジトリが必要です。ここでは LabEx が提供する git-playground リポジトリを使用します。
リポジトリをクローンすることから始めましょう。
- LabEx の仮想マシン (VM) でターミナルを開きます。

- 次のコマンドを実行してリポジトリをクローンします。
git clone https://github.com/labex-labs/git-playground
以下のような出力が表示されるはずです。
Cloning into 'git-playground'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 8 (delta 0), reused 8 (delta 0), pack-reused 0
Receiving objects: 100% (8/8), done.
- リポジトリのディレクトリに移動します。
cd git-playground
これでローカルマシンにリポジトリがあるので、コミット履歴の調査を始めることができます。
基本的な git log コマンドの調査
リポジトリをクローンしたので、git log コマンドを使ってコミット履歴を表示する方法を学んでみましょう。
git log コマンドは、リポジトリ内のすべてのコミットのリストを表示します。最新のコミットから始まります。各コミットエントリには以下が含まれます。
- 一意のコミットハッシュ (識別子)
- 作者情報
- コミットの日付と時刻
- コミットメッセージ
基本的なコミット履歴を表示してみましょう。
git log
以下のような出力が表示されるはずです。
commit d22f46ba8c2d4e07d773c5126e9c803933eb5898 (HEAD -> master, origin/master, origin/feature-branch, origin/HEAD)
Author: Hang <huhuhang@users.noreply.github.com>
Date: Wed Apr 26 14:16:25 2023 +0800
Added file2.txt
commit cf80005e40a3c661eb212fcea5fad06f8283f08f
Author: Hang <huhuhang@users.noreply.github.com>
Date: Wed Apr 26 14:16:25 2023 +0800
Added file1.txt
commit b00b9374a7c549d1af111aa777fdcc868d8a2a01
Author: Hang <huhuhang@gmail.com>
Date: Wed Apr 26 14:16:00 2023 +0800
Initial commit
出力が長い場合、以下の操作で移動できます。
Spaceキーを押すと次に進みます。bキーを押すと前に戻ります。qキーを押すとログ表示を終了します。
各コミットには一意の識別子 (長い 16 進数の文字列)、作者情報、コミットの日付と時刻、および行われた変更を説明するメッセージがあることに注意してください。
特定の日付範囲内のコミットを表示する
ここでは、特定の日付に基づいてコミットをフィルタリングする方法を学びます。Git はこの目的のために 2 つの便利なオプションを提供しています。
--sinceまたは--after:特定の日付以降のコミットを表示します。--untilまたは--before:特定の日付以前のコミットを表示します。
これらのオプションを組み合わせることで、特定の日付範囲内のコミットを表示できます。
2023 年 4 月 25 日から 2023 年 4 月 27 日までに行われたすべてのコミットを表示してみましょう。
git log --since='Apr 25 2023' --until='Apr 27 2023'
このコマンドは、2023 年 4 月 25 日から 4 月 27 日までに行われたすべてのコミットを表示します。出力は次のようになるはずです。
commit d22f46ba8c2d4e07d773c5126e9c803933eb5898 (HEAD -> master, origin/master, origin/feature-branch, origin/HEAD)
Author: Hang <huhuhang@users.noreply.github.com>
Date: Wed Apr 26 14:16:25 2023 +0800
Added file2.txt
commit cf80005e40a3c661eb212fcea5fad06f8283f08f
Author: Hang <huhuhang@users.noreply.github.com>
Date: Wed Apr 26 14:16:25 2023 +0800
Added file1.txt
commit b00b9374a7c549d1af111aa777fdcc868d8a2a01
Author: Hang <huhuhang@gmail.com>
Date: Wed Apr 26 14:16:00 2023 +0800
Initial commit
Git は多くの日付形式を受け付けます。以下がその例です。
"YYYY-MM-DD"(例:2023-04-25)"Month DD YYYY"(例:Apr 25 2023)"DD Month YYYY"(例:25 Apr 2023)
別の日付形式を試して、異なる範囲内にコミットがあるかどうかを確認してみましょう。
git log --since='2023-04-20' --until='2023-04-24'
この期間中にコミットがなかった場合、このコマンドは結果を返さないことがありますが、これは正常な現象です。
相対日付と書式設定オプションの使用
Git は相対日付もサポートしており、最近のアクティビティをすぐに確認するのに非常に便利です。
過去 12 週間のすべてのコミットを表示してみましょう。
git log --since='12 weeks ago'
このコマンドを実行する時期によって、その期間内にあるすべてのコミットが表示される場合もあれば、一部のコミットのみが表示される場合もあります。
他の便利な相対日付形式には以下があります。
"X days ago""X months ago""yesterday""last week"
過去 1 年間のコミットを表示してみましょう。
git log --since='1 year ago'
このコマンドは、過去 1 年間に行われたすべてのコミットを表示します。
追加の書式設定オプション
git log は出力をカスタマイズするための様々な書式設定オプションを提供しています。以下はいくつかの便利なオプションです。
- 各コミットを 1 行で表示する、より簡潔なログを表示するには:
git log --oneline --since='Apr 25 2023' --until='Apr 27 2023'
出力は次のようになります。
d22f46b (HEAD -> master, origin/master, origin/feature-branch, origin/HEAD) Added file2.txt
cf80005 Added file1.txt
b00b937 Initial commit
- 各コミットで変更されたファイルを確認するには:
git log --name-status --since='Apr 25 2023' --until='Apr 27 2023'
このコマンドは、各コミットで変更されたファイルの状態を表示し、変更内容を理解するのに役立ちます。
これらの書式設定オプションは日付フィルターと組み合わせることができ、プロジェクトの履歴をより効果的に理解するための強力なクエリを作成できます。
まとめ
この実験では、Git を使って特定の日付範囲内のコミットを表示する方法を学びました。以下の内容を学びました。
- Git リポジトリをローカルマシンにクローンする方法
- コミット履歴を表示するための基本的な
git logコマンドの使い方 --sinceと--untilオプションを使って特定の日付範囲に基づいてコミットをフィルタリングする方法- 「12 weeks ago」のような相対日付を使ってより柔軟にフィルタリングする方法
- 書式設定オプションで
git logの出力をカスタマイズする方法
これらのスキルは、プロジェクトの履歴を理解し、バグを特定し、コードベースの開発タイムラインを確認するために不可欠です。Git を使い続けるうちに、これらのフィルタリング技術は、大規模なリポジトリでも簡単に操作するのに役立ちます。