Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

git logで特定ディレクトリのコミット履歴を閲覧する

More than 1 year has passed since last update.

この記事は、Git Advent Calendar 2018の12日目の記事です。

先日Advent Calendarに初めて参加しましたが折角なのでもう1つ記事を書いてみます。
小ネタになります:pushpin:

前置き

Gitのリポジトリで特定ディレクトリのコミット履歴を確認することになりました。

結論

最初に結論を書きます。

構文
git log -- <path>…​
使用例
git log -- .         # カレントディレクトリ 
git log -- css       # 「css」ディレクトリ
git log -- css js    # 「css」「js」ディレクトリ

以降に調査した経緯や考察を書いていきます。
情報だけ知れればよい方は以降読み飛ばしてください:bangbang:

筆者が結論に辿り着くまでの経緯

筆者の要件は特定ディレクトリのgit log --onelineを表示することです。

  1. git log -p <path>
    ネット上では最も紹介されているように思いました。筆者の要件ではpオプションの情報(パッチ)が表示されているので情報が多すぎます。
  2. git log --oneline -p <path>
    上記にonelineオプションを追加してみましたが、pオプションの情報(パッチ)は表示されたままで情報が多すぎます。
  3. ドキュメントを読みパスを理解する

    構文
    git log [<options>] [<revision range>] [[--] <path>…​]
    

    pオプションの引数でパスが指定できるのではなく、[[--] <path>…​]でパスを指定する構文と理解しました。紹介されているコマンドは以下のように解釈されています。

    git log -p <path>…​
    # options       : p
    # revision range: 未指定
    # <path>        : "--"を省略して<path>を指定
    
  4. pオプションを指定しない

    上記を理解できたのでpオプションを指定しないことにしました。
    純粋にgit logを指定パスでフィルタリングした結果になりました。

    git log <path>…​
    # options       : 未指定
    # revision range: 未指定
    # <path>        : "--"を省略して<path>を指定
    
  5. onelineオプションと"--"を明示して<path>を指定

    git log --oneline -- <path>…​
    # options       : --oneline
    # revision range: 未指定
    # <path>        : "--"を明示して<path>を指定
    

    "--"を明示する理由(日本語)はこちらのページが分かりやすかったです。

    -- パラメーターは、後続の引数がブランチ名ではなく、ファイルパスであることを git log に伝えるために使用されます。ブランチと混同される可能性がまったくない場合は、-- を省略できます。

検証する

  • サンプルのリポジトリ

    $ tree
    .
    ├── README.md
    ├── css
    │   ├── main.css
    │   └── style.css
    └── index.html
    
  • 筆者の要件を満たしたコマンド

    $ git log --oneline css
    2985437 [main.css]新規作成
    18bd23a [style.css]「売切れ」スタイルを追加 [index.html]フライドポテトを追加 [index.html]ラーメンを売切れに変更
    1ea13c3 [index.html]ラーメンを追加 [style.css]「おすすめ」スタイルを追加
    c0cbb75 [style.css]新規作成
    
  • ネットでよく紹介されるコマンド

    $ git log -p css
    commit 298543770e8ccb83293edc7ea2861581aa67b2a6
    Author: devnokiyo <devnokiyo@gmail.com>
    Date:   Wed Dec 19 21:56:36 2018 +0900
    
    [main.css]新規作成
    
    メインで使うcssを事前に用意
    
    diff --git a/css/main.css b/css/main.css
    new file mode 100644
    index 0000000..e69de29
      :
      :
    commit c0cbb75a9224fcc411628b44dedd276bc6cb334e
    Author: devnokiyo <devnokiyo@gmail.com>
    Date:   Wed Dec 19 20:28:04 2018 +0900
    
    [style.css]新規作成
    
    h1タグの文字色は赤にする
    
    diff --git a/css/style.css b/css/style.css
    new file mode 100644
    index 0000000..4f1c9e7
    --- /dev/null
    +++ b/css/style.css
    @@ -0,0 +1,3 @@
    +h1 {
    +  color: #00F
    +}
    

ファイルも指定可能

ディレクトリだけでなくファイルを指定することもできます。
むしろこちらの方がより多く紹介されていますね。

git log css/style.css
git log css/style.css css/main.css

参考

公式ドキュメント
bitbucket

終わりに

紹介されているコマンドも単にコピペするのではなく、ドキュメントを読んで構文や仕様を理解して解釈すると勉強になりますね。重要なことなので調査する度に痛感します。

devnokiyo
SESからゲーム業界の東証1部上場企業に転職した正社員エンジニアです。Webサイトや稀にモバイルアプリを自社開発してます。少し採用業務も始めました。教材を執筆したりAWSスクールのお手伝いもしてます。犬とデジモノガジェットが好きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away