Skip to content

sysu-compsci/git-step-by-step

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

git 逻辑与本地使用基础

什么是 git

首先,要理解什么是图(graph)

TODO(DAG 有向无环图的例子)

git 存储的本质是有向无环图

git 的 DAG 里面存在非常多个 Δ 节点,里面存储了对代码仓库目录中若干文件的若干修改。

从一个入度为 0 的 Δ 节点为起始点,到达某个 Δ 节点的路径或者若干 Δ 节点组成的链表,就是一个“版本”,因为这条路径存储了代码仓库目录从一无所有开始的所有更改。同时,git 里面的 DAG 还有一个特性:每个 Δ 节点向上回溯总能到达某个特定的 root 节点,这就意味着,一个 Δ 节点就代表了一个版本。通过 Δ 节点的 hash 的唯一性,我们可以通过 Δ 节点的 hash 值来检索出某个中间版本。

存在一个临时 Δ 节点,它并没有被连入 DAG 里面。

git 使用

建议 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
  • ...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published