git notes でコミット自体を変更せずに git に注釈を残す


git notes についてまとめます。

git notes とは?

git のコミットの注釈を管理するコマンドです。
注釈の追加、編集、削除、参照など様々な操作が可能です。
namespace を設定することが可能で、デフォルトでは commits ネームスペースが指定されます。

用途

コミットオブジェクトそのものを変更することなく、コミットに対して注釈(メモ)を補足できる。

例えばコミットしてからだいぶ経ってから古いコミットによるバグが発覚して、
あとからそのコミットにひも付けた注釈(メモ)を追加したい場合などです。

機能一覧

追加

# HEADのコミットにノートを追加
$ git notes add -m "Note1" HEAD
# HEADの一つ前のコミットにノートを追加
$ git notes add -m "Note2" HEAD~
# 任意のコミットにノートを追加
$ git notes add -m "Note3" <some sha1 hash>

リスト

左側のハッシュがnote本体のハッシュ。
右側のハッシュがnoteをつけたコミットのハッシュです。

$ git notes list
04ac83ee0e9b9bff9e4d5a8aa3c9945725ff9a51 8318a1b27be996a102d155c7e412846f6ddb0e1b
8de2ed665cb9306796f48d5ee9f80306267edd0b a958bd1ca331999827dc49247a8ed49ebc2f3ec3

参照

$ git notes show 8318a1b27be996a102d155c7e412846f6ddb0e1b
Note1

ログから確認

$ git log
commit 8318a1b27be996a102d155c7e412846f6ddb0e1b
Author: user
Date:   Wed Sep 14 21:26:29 2016 +0900

   hige

Notes:
   Note1

commit a958bd1ca331999827dc49247a8ed49ebc2f3ec3
Author: user
Date:   Wed Sep 14 21:16:42 2016 +0900

   hoge1, hoge2

Notes:
   Note2

GitHub 連携

GitHubを通して notes を共有することはできるが、WebUI はなくなってしまったようです。
あまり使われなかった、ということなのかな?

push

notes の情報は通常の push とは別に push する必要があります

$ git push origin refs/notes/commits
  • ~/.gitconfig に追加
[alias]
    pushnotes = "!sh -c 'git push $1 refs/notes/*' -"
  • alias で呼び出し
$ git pushnotes origin

fetch

fetch も push と同じく別途 fetch する必要があります

$ git fetch origin refs/notes/commits:refs/notes/commits
  • ~/.gitconfig に追加
[alias]
    fetchnotes = "!sh -c 'git fetch $1 refs/notes/*:refs/notes/*' -"
  • alias で呼び出し
$ git fetchnotes origin

GitHub で push した notes を確認する場合

https://github.com/<user>/<repo>/tree/refs/notes/commits にアクセスする

関連情報