Git 履歴とログ管理

GitGitBeginner
今すぐ練習

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

はじめに

ようこそ、Gitのタイムトラベラー!今日は、あなたのGitプロジェクトの履歴を通じた刺激的な旅に出ましょう。Gitの最も強力な機能の1つは、プロジェクトの履歴を追跡して表示する能力です。この履歴は、何が起こったかの記録だけでなく、プロジェクトを理解し、デバッグし、改善するための強力なツールでもあります。

この実験では、Gitの履歴記録への窓口であるgit logコマンドを探ります。基本的な使い方から始めて、ログ出力のフォーマット、日付でログをフィルタリング、特定の変更を検索、さらにはプロジェクト履歴から統計を生成するなど、高度なテクニックにも触れていきます。

この実験が終わる頃には、プロのようにプロジェクトの履歴を操り、価値のある洞察と情報を抽出できるようになり、より効果的な開発者になれるでしょう。バグを探していたり、変更をレビューしたり、ただプロジェクトがどのように進化したかを理解しようとしている場合でも、ここで学ぶスキルは非常に役立ちます。

さあ、Gitのタイムマシンに乗り込んで過去を探りましょう!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/SetupandConfigGroup -.-> git/init("Initialize Repo") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/shortlog("Condensed Logs") subgraph Lab Skills git/init -.-> lab-387490{{"Git 履歴とログ管理"}} git/commit -.-> lab-387490{{"Git 履歴とログ管理"}} git/log -.-> lab-387490{{"Git 履歴とログ管理"}} git/shortlog -.-> lab-387490{{"Git 履歴とログ管理"}} end

作業環境のセットアップ

Gitの履歴機能を掘り下げる前に、いくつかのコミット履歴を持つ作業環境をセットアップして探索しましょう。新しいディレクトリを作成し、Gitリポジトリを初期化し、いくつかのコミットを追加します。

ターミナルを開き、次のコマンドを入力します。

cd ~/project
mkdir git-history-lab
cd git-history-lab
git init

次に、いくつかのファイルを作成して一連のコミットを行います。以下のコマンドをコピーして貼り付けます。

echo "## Git History Lab" > README.md
git add README.md
git commit -m "Initial commit"

echo "function hello() {" > script.js
echo "  console.log('Hello, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add hello function"

echo "function goodbye() {" >> script.js
echo "  console.log('Goodbye, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add goodbye function"

echo "This is a test file" > test.txt
git add test.txt
git commit -m "Add test file"

echo "hello();" >> script.js
echo "goodbye();" >> script.js
git add script.js
git commit -m "Call hello and goodbye functions"

さっきやったことを分解してみましょう。

  1. READMEファイルを作成し、最初のコミットを行いました。
  2. "hello"関数を持つJavaScriptファイルを作成し、コミットしました。
  3. 同じファイルに"goodbye"関数を追加し、コミットしました。
  4. テストファイルを追加し、コミットしました。
  5. 最後に、両方の関数を呼び出すようにスクリプトを変更し、変更をコミットしました。

これで、探索する履歴があるリポジトリができました!

基本的なログの使い方

これでいくつかのコミット履歴があるので、git logの基本的な使い方を探りましょう。

プロジェクトのコミット履歴を見るには、単に次のコマンドを実行します。

git log

次のような出力が表示されるはずです。

commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> main)
Author: Your Name <[email protected]>
Date:   Mon Jun 5 10:00:00 2023 +0000

    Call hello and goodbye functions

commit 2345678901abcdef2345678901abcdef23456789
Author: Your Name <[email protected]>
Date:   Mon Jun 5 09:45:00 2023 +0000

    Add test file

...

ログの各エントリは次のように表示されます。

  • 完全なコミットハッシュ(コミットの一意の識別子)
  • コミットの作者
  • コミットの日付と時刻
  • コミットメッセージ

デフォルトでは、git logは最新のコミットから始まるすべてのコミットを表示します。逆時系列順(最新のものから)で表示されます。

出力が長い場合、Gitは通常lessというページャーで表示します。矢印キーで移動し、qを押して終了できます。

ログのより簡潔なバージョンを見るには、次のコマンドを使用できます。

git log --oneline

これは、短いコミットハッシュとコミットメッセージだけで、各コミットを1行に表示します。

忘れないでください。git logはプロジェクトの履歴への窓口です。何が変更され、いつ、誰によって変更されたかを理解するための素晴らしい出発点です。

ログ出力のフォーマット設定

Gitは、必要な情報を正確に表示するためにログ出力をフォーマットするための強力なオプションを提供します。これらのオプションのいくつかを探りましょう。

各コミットで変更されたファイルを表示するには、--statオプションを使用します。

git log --stat

これにより、各コミットでどのファイルが変更され、何行が追加または削除されたかが表示されます。

変更の詳細なビューを取得するには、-pオプションを使用します。

git log -p

これは、各コミットの実際のパッチ(追加された行と削除された行)を表示します。詳細な変更のレビューに非常に役立ちます。

--prettyオプションを使用してカスタムフォーマットも作成できます。たとえば:

git log --pretty=format:"%h - %an, %ar : %s"

これにより、以下が表示されます。

  • %h:省略されたコミットハッシュ
  • %an:作者名
  • %ar:作者日付、相対的な日付
  • %s:件名(コミットメッセージ)

必要な情報を含めるようにこのフォーマット文字列をカスタマイズできます。以下はいくつかの便利なプレースホルダです。

  • %H:完全なコミットハッシュ
  • %ad:作者日付
  • %cn:コミッター名
  • %ce:コミッターメールアドレス
  • %cd:コミッター日付

あなたに最適なものを見つけるために、さまざまなフォーマットを試してみましょう!

日付でログをフィルタリングする

多くの場合、特定の期間内のコミットを見たいと思うことがあります。Gitは、日付でログをフィルタリングするためのいくつかのオプションを提供しています。

先週のコミットを表示するには:

git log --since=1.week

また、特定の日付を使用することもできます。

git log --after="2023-06-01" --before="2023-06-30"

これにより、2023年6月1日から6月30日までのコミットが表示されます。

Gitは、「昨日」、「1ヶ月2週間3日前」などの相対的な日付形式を含む、さまざまな日付形式を理解しています。

--beforeの代わりに--untilオプションを使用することもでき、--after--sinceと同義です。

これらのフィルタは、コミット日が指定された範囲内にあるコミットを表示します。コミット日は、コミットが作成された日付であり、実際の変更が行われた日付とは異なる場合があります。

特定の変更が導入された時期を調査している場合、次のステップで説明する--grepオプションを使用して、特定のコミットメッセージを検索することができます。

特定の変更をログから検索する

Gitは、特定のコミットを見つけるための強力な検索機能を備えています。これらの機能のいくつかを探りましょう。

コミットメッセージに特定の単語が含まれるコミットを検索するには:

git log --grep="function"

これにより、コミットメッセージに「function」という単語が含まれるすべてのコミットが表示されます。

また、特定のファイルの変更を検索することもできます。

git log -- script.js

これは、script.jsファイルに影響を与えたすべてのコミットを表示します。

特定のコード行を追加または削除した変更を検索するには:

git log -S "console.log"

これは「ピックアックス」検索と呼ばれます。「console.log」の出現回数が変化したコミットを表示します。

これらを他のオプションと組み合わせることができます。たとえば、先週のscript.jsの詳細な変更を表示するには:

git log -p --since=1.week -- script.js

忘れないでください。Gitの検索はデフォルトで大文字小文字を区別します。大文字小文字を区別しない検索には-iオプションを使用します。

git log --grep="function" -i

これらの検索機能は、特定の変更が導入された時期やバグが修正された時期を追跡する際に非常に役立ちます。

ログから統計情報を生成する

Gitは、統計情報を通じてプロジェクトの履歴に関する貴重な洞察を提供することができます。これらの統計情報を生成する方法をいくつか探りましょう。

作者別のコミット数の概要を表示するには:

git shortlog -s -n

これは、コミット数でソートされた作者の一覧を表示し、各名前の横にコミット数が表示されます。

各作者が追加および削除した行数を表示するには:

git log --author="Jane Doe" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s, Removed lines: %s, Total lines: %s\n", add, subs, loc }'

「Jane Doe」を確認したい作者の名前に置き換えてください。

最も変更されたファイルを表示するには:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

これは、最も頻繁に変更された上位10のファイルを表示します。

コミットの総数を表示するには:

git rev-list --count HEAD

これらの統計情報は、プロジェクトの全体的な開発パターンを理解するのに非常に役立ちます。プロジェクトのどの部分が最も活発に開発されているか、最も活発な貢献者は誰であるか、およびプロジェクトがどのように時間の経過とともに成長してきたかを特定するのに役立ちます。

忘れないでください。これらの統計情報は情報提供に役立つかもしれませんが、全体像を物語っているわけではありません。コミット数や変更された行数は、必ずしも貢献の影響や品質と相関しません。

まとめ

おめでとうございます、Gitの履歴解読家!あなたはここでGitの履歴とログ管理機能の力を解き放ちました。ここで扱った重要な概念を振り返りましょう。

  1. 基本的なログの使い方git logを使ってプロジェクトのコミット履歴を表示する方法を学びました。
  2. ログ出力のフォーマット設定:必要な情報だけを正確に表示するようにログ出力をカスタマイズする方法を見つけました。
  3. 日付でログをフィルタリングする:特定の期間内のコミットに焦点を当てる方法を学びました。
  4. 特定の変更をログから検索する:特定の変更が導入された時期を見つけるための強力な手法を学びました。
  5. ログから統計情報を生成する:プロジェクトの開発パターンに関する洞察を抽出する方法を探りました。

これらのスキルは、より大きなプロジェクトに取り組む際に非常に貴重です。バグを探していたり、機能の進化を見直したり、プロジェクトの全体的な開発トレンドを理解しようとしていたりする場合でも、git logコマンドとそのさまざまなオプションがあなたの信頼できるパートナーになります。

忘れないでください。Gitの履歴はただ何が起こったかの記録だけでなく、プロジェクトを理解し改善するための強力なツールです。賢く使えば、あなたをより効果的な開発者にしてくれます。

これらのコマンドをさらに探求して実験してください。プロジェクトの履歴を操作することに慣れるほど、そこから得られる洞察が多くなります。Gitリポジトリでの楽しい時間旅行をお楽しみください!