git notes

[背景介紹]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。

相關文章
相關標籤/搜索