Git命令分为底层命令 (Plumbing) 和高层命令 (Porcelain),
本文主要是看底层命令时的笔记,用来了解Git的内部工作机制。
常用的Git命令请查看:Git 小结

Git Command Pro.

Git 是一套内容寻址文件系统(content-addressable)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
git init
git hash-object                     # 底层命令,用于存储内容
git cat-file [-p 输出对象内容] [-t 输出对象类型]
git cat-file -p master^{tree}       # 专用:输出master这个commit对象所指的tree对象
git commit-tree SHA -p parentSHA    # 作一次commit,SHA 指提交的tree对象,-p 用来指定父级commit对象
git update-ref refs/heads/test SHA  # 新建或更新一个分支到SHA这个commit对象
git symbolic-ref HEAD [refs/heads/test] # 查看或更改HEAD的引用内容
git update-ref refs/tags/v0.0 SHA   # 新建一个简单标签(lightweight tag)
git tag -a v1.0 SHA -m "comments"   # 新建一个带注释的标签(annotated tag) ,
# 区别在于:lightweight只是一个引用到commit对象的指针; 而annotated是一个tag对象,有自己的SHA值。

git remote add name url     # 添加一个远程仓库,name是你为远程仓库取的别称,url是远程仓库的地址。
                            # `Remote 引用 ` 和 `分支` 主要区别在于他们是不能被 check out 的。
git push origin :topic      # 删除远程的topic分支

git gc      # garbage collect, 将松散对象打包,新commit的对象(blob, tree, commit)成单个文件存储,
            # 打包后成一个文件。
            # 区别在于:打包后只存储最新版的文件,之前的版本将只记录差异。
git verify-pack -v .git/objects/pack/*.idx  # 检查并显示打包过的对象

git log --pretty=oneline    # 显示git日志

file mode:

  • 040000: 文件夹
  • 100644: 普通文件
  • 100664: 普通文件(群组可写)
  • 100755: 可执行文件
  • 120000: 符号链接
  • 160000: Git链接(Gitlink)

链接学习

参考博客: https://www.howtoing.com/controlling-urls-and-links-in-jekyll/

里面有动态链接到自己之前写的博文的方法