[背景介紹]git
git通常在生成一個commit以後,若是須要修改到commit裏面的commit message的話,通常會使得commit tree自己發生變化。若是隻是修改commit tree的HEAD還好,若是是修改較前的一個commit,會致使後面的commit tree全都會亂掉。咱們就須要有一種方法來保證:修改commit的commit message時,不須要動到commit tree。這就是咱們這裏要介紹到的git notes。rem
[用法]it
1. 爲一個commit添加notesobject
1.1. git notes [--ref $NOTE-REF] add -m "$MSG" $COMMIT進階
1.2. 若是commit已經有notes了,這樣就會abort,提示已經存在notes,那麼咱們就能夠加上-f參數,強制覆蓋notes。grep
e.g. git notes add -f -m "$MSG"方法
-f 的用法就是force,強制蓋掉本來的notes。di
1.3. 爲一個commit添加一個已經存在的notescopy
git notes add [-f] -C $NOTES-IDco
1.4. 交互式添加notes
git notes edit
這會進入notes message的編輯界面,輸入相應的message,而後保存退出便可。
2. 移掉一個commit的notes
git notes remove $COMMIT
3. 將commitA的notes copy到commitB
git notes copy commitA commitB
這樣的用法至關於 git notes add [-f] -C $(git notes list $commitA) $commitB
4. 顯示一個commit的notes
4.1.顯示notes的內容
git notes show $COMMIT
4.2. 顯示notes的ID
git notes list $COMMIT
5. 顯示一個notes對應的commit
git notes list | grep $NOTE-ID
git notes list: 若是不指定commit,那麼會列舉全部的notes與對應的commit的關係
[進階知識]
git repository裏面的notes,也是採用git一向的作法,一切皆爲object,一切object都會連成tree,tree即爲branch。
git裏面的branch通常被指代爲.git/refs/heads/ 裏面的那些branch,.git/refs/裏面的其它都稱之爲reference,它們都具備branch的特性,因此說也是能夠check-out的。
.git/refs/notes 裏面都是各個notes的tree,能夠有.git/refs/notes/tree1, 也能夠有.git/refs/nots/tree2。這樣就有兩條notes的tree。
咱們在增,刪,改,查 notes的時候,--ref $NOTES-REF就指定了具體的notes的reference。