存储结构
- 有向无环图
每个结点即为一次提交状态(快照),包含作者信息和描述信息等。上图简单描述了利用分支进行并行开发新功能和修复漏洞,以及合并分支的过程。合并后,新的提交状态已将漏洞修复且具有新功能。
存储模型
- type blob (file) = array< byte >
- type tree = map< string , tree | blob >
- type commit = struct{
parents array< commit > ——pointer
author : string
message : string
snapshot : tree ——pointer
利用指针,存储ID,对象的引用通过ID和Hash值
}
- type object = blob | tree | commit
- objects = map< string , object >
- def store(o):
id = sha1(o) —hash散列
object[id] = o
- def load(id):
retrieve object[id]
- references map< string , string >
常用的基本Git命令
- git init 初始化
- git help 查看帮助信息
- git status 查看修改状态
- git add [file] 将文件加入到staging area暂存区
- git commit -m ' ' 提交并附上描述信息
- git log 查看历史提交记录
- git log --all --graph --decorate (--oneline) 以图表的形式展示历史提交记录
- git cat-file -p [hash值] 查看存储的对象
- git checkout [hash值/reference名] 工作目录的状态切换到该提交时的状态--改变Head指向
- git diff [file] 查看当前工作目录自最后一个快照后的变更
- git diff [hash值/reference名] [file] 查看自该提交状态后所的变更
- git diff [hash值1] [hash值2] [file] 查看后提交状态相对前提交状态的变更
- git checkout [file] 放弃当前工作目录的修改并回到Head指向的状态
- git branch 查看本地存储库中的所有分支(master为主分支)
- git branch -vv 查看分支的信息
- git branch [new branch名--reference名] 建立新分支且其指向与Head一致
- git checkout [branch名] 切换分支且Head指向当前分支
- git merge [branch名] 若有合并冲突则需要对代码进行兼容修改后git add再git merge --continue(合并前git checkout master)
- git remote 查看所有远程源
- git remote add [remote名] [url] 添加远程源
- git push [remote名] [local branch]:[remote branch] 将本地的存储库的当前分支推送到远程源
- git clone [remote url] [folder name] 将远程存储库的内容复制到本地存储库的对应文件夹下
- git clone --shallow 获取远程存储库的最新快照到本地存储库
- git fetch/pull 获取远程存储库的更改到本地存储库
- vim ~/.gitconfig 修改配置文件 如改user的name=和email=
- git blame [file] 查看谁在何时进行的修改
- git stash 暂存修改
- git stash pop 使用修改
- vim ~/.gitignore 添加git忽略的文件(如.o .DS_Store)