TODO(DAG 有向无环图的例子)
git 的 DAG 里面存在非常多个 Δ 节点,里面存储了对代码仓库目录中若干文件的若干修改。
从一个入度为 0 的 Δ 节点为起始点,到达某个 Δ 节点的路径或者若干 Δ 节点组成的链表,就是一个“版本”,因为这条路径存储了代码仓库目录从一无所有开始的所有更改。同时,git 里面的 DAG 还有一个特性:每个 Δ 节点向上回溯总能到达某个特定的 root 节点,这就意味着,一个 Δ 节点就代表了一个版本。通过 Δ 节点的 hash 的唯一性,我们可以通过 Δ 节点的 hash 值来检索出某个中间版本。
存在一个临时 Δ 节点,它并没有被连入 DAG 里面。
建议 alias awesome_git_log='git log --oneline --decorate --all --graph',用这条命令可以方便地看到 git 的 commit graph。
git 的本地操作主要包含
- 向临时 Δ 节点内增删东西
- 为临时 Δ 节点添加注释,当前版本指向这个临时 Δ 节点,并且创建新的空的临时 Δ 节点
git init: 将当前文件夹初始化为一个 git 仓库文件夹git add ${PATH}: 将若干文件自上一个版本的变化加入临时 Δ 节点git status:- 绿色(Changes to be committed):已经加入临时 Δ 节点的改变
- 红色:未加入临时 Δ 节点的改变
git reset:清空临时 Δ 节点的内容git reset ${PATH}:将加入临时 Δ 节点的对某文件的更改给清空(让 git status 绿色的文件变红色)git commit -m "${DESCRIPTION}":为当前临时 Δ 节点提供描述;创建新的空 Δ 节点,当前临时节点指向它;将新的空 Δ 节点当作当前临时节点
上面的命令都不会改变仓库文件夹中的文件,只是将仓库文件夹中各种文件的变化给记录到版本中。
git checkout ${VERSION} 文件/路径:将某个文件恢复到某一个版本${VERSION}如果是 HEAD,则表示最新的版本;HEAD~1,则表示最新版上一个版本${VERSION}也可以是一个哈希值或者哈希值的前几项
TODO:
- stash
- conflict resolving
- ...