首页 > 代码库 > git notes

git notes

[背景介绍]

  git一般在生成一个commit之后,如果需要修改到commit里面的commit message的话,一般会使得commit tree本身发生变化。如果只是修改commit tree的HEAD还好,如果是修改较前的一个commit,会导致后面的commit tree全都会乱掉。我们就需要有一种方法来保证:修改commit的commit message时,不需要动到commit tree。这就是我们这里要介绍到的git notes。

[用法]

  1. 为一个commit添加notes

    1.1. git notes [--ref $NOTE-REF] add -m "$MSG" $COMMIT

    1.2. 如果commit已经有notes了,这样就会abort,提示已经存在notes,那么我们就可以加上-f参数,强制覆盖notes。

      e.g. git notes add -f -m "$MSG"

      -f 的用法就是force,强制盖掉原本的notes。

    1.3. 为一个commit添加一个已经存在的notes

      git notes add [-f] -C $NOTES-ID

    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。

git notes