平方X

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2099|回复: 0

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

[复制链接]

414

主题

709

帖子

3602

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3602
QQ
发表于 2017-10-13 15:29:08 | 显示全部楼层 |阅读模式
[md]

感谢 [coding.《使用原理视角看 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>]

[/md]
我是平方X~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|平方X ( 冀ICP备14018164号 )

GMT+8, 2024-4-26 01:34 , Processed in 0.108499 second(s), 21 queries .

技术支持:Powered by Discuz!X3.4  © 2001-2013 Comsenz Inc.

版权所有:Copyright © 2014-2018 平方X www.pingfangx.com All rights reserved.

快速回复 返回顶部 返回列表