平方X 发表于 2017-10-13 15:29:08

阅读《使用原理视角看 Git》



感谢 (https://blog.coding.net/blog/principle-of-Git)

# 2. Git 原理
* 工作区
* 暂存区
* 本地仓库

## 2.1 快照
如其所说,保存的是文件快照。在.git/objects
用` git hash-object <file> `可以计处出文件的sha-1 值,
> 我们可以看到,在 objects 目录下,存放了很多文件,他们都使用 sha-1 的前两位创建了文件夹,剩下的38位为文件名。我们先称呼这些文件为 obj 文件。

>对于这些 obj 文件,其实分为四种类型,分别是 blob、tree、commit、tag。

## 2.2 暂存区
> 暂存区是一个文件,路径为: .git/index
可以用 `git ls-files --stage` 查看其中的内容
第二列就是sha-1 hash值,相当于内容的外键,指向了实际存储文件内容的blob。第三列是文件的冲突状态,这个后面会讲,第四列是文件的路径名。

## 2.3 文件状态
暂存区|本地仓库|sha-1|文件状态
-|-|-|-
√|√|×|modified
×|√|-|removed
√|×|-|added

工作区|暂存区|sha-1|文件状态
-|-|-|-
√|√|×|modified
×|√|-|missing
√|×|-|untracked

## 2.4 分支
```
cat .git/HEAD
=>ref: refs/heads/master
```

```
cat .git/refs/heads/master
=> 2b388d2c1c20998b6233ff47596b0c87ed3ed8f8
```

```
git cat-file -p <object>
```

指向一个 commit

# 3. 高层命令
### 3.3.3 Reset
```
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
```
>soft 仅修改分支指向(HEAD),不修改暂存区(index)和工作区(working tree);
>mixed 会修改分支指向和暂存区;
>hard 会修改分支指向,暂存区和工作区

## 3.5 bisect
* git bisect start
* git bisect (bad|new) [<rev>]
* git bisect (good|old) [<rev>...]
* ...
* git bisect reset [<commit>]


页: [1]
查看完整版本: 阅读《使用原理视角看 Git》