Git学习之路
安装
[mac安装包](Git - Downloading Package (git-scm.com))
git --version
配置
- /etc/gitconfig文件:系统中对所有用户都普遍适用的配置,若使用git config时用–system选项,读写的就是这个文件
- ~/.gitconfig文件:用户目录下的配置文件只适用于该用户,若使用git config时用–global选项,读写的就是这个文件
- .git/config文件:当前项目的Git目录中的配置文件(也就是工作目录中的.git/config文件)这里的配置仅仅针对当前项目有效
配置用户信息
git config --global user.name '用户名'
git config --global user.email 邮箱地址
git config --list
区域
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
- 版本区:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
对象
Git底层命令
1.Linux基本命令
- clear:清楚屏幕
- echo ‘信息’:往控制台输出信息…
- echo ‘内容’>文件名.txt:创建文件并填写内容…
- ll:将当前目录下的子文件&子目录平铺在控制台
- find 目录名:将对应目录下的子孙文件&子孙目录平铺在控制台
- find 目录名 -type f :将对应目录下的文件平铺在控制台
- rm 文件名:删除文件
- mv 源文件 重命名文件:重命名
- cat 文件的url:查看对应文件的内容
- vim 文件的url
- 按i进入插入模式 进行文件编辑
- 按esc键&按:键进行命令的执行
- ? q! 强制退出(不保存)
- ? wq 保存退出
- ? set nu 设置行号
2.初始化新仓库
git init
git clone
3.git目录
- hooks 目录包含客户端或者服务端的钩子脚本;
- info 包含一个全局性排除文件
- logs 保存日志信息
- objects 目录存储所有数据内容;
- refs 目录存储指向数据(分支的提交对象的指针)
- config 文件包含项目特有的配置选项
- description 用来显示对仓库的描述信息
- HEAD 文件指示目前被检出的分支
- index 文件保存暂存区信息
4.git对象
Git的核心是一个简单的键值对数据库.你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容
-
向数据库写入内容 并返回对应键值
-
查看Git是如何存储数据
-
根据键值拉取数据
5.对一个文件进行简单版本控制(流程)
-
创建一个新文件并将其内容存入数据库 echo '内容' > test.txt
git hash-object -w test.txt
返回一个键值…例如(asdk1321askndksjad) -
向文件里边写入新内容,并再次将其存入数据库 echo '内容2' > test.txt
git hash-object -w test.txt
返回一个新键值…例如(12fasfas12edsa) -
查看数据库内容 find .git/objects -type f
git cat-file -p asdk1321askndksjad
git cat-file -p 12fasfas12edsa
git cat-file -t 12fasfas12edsa
返回:blob -
缺点
- 难以记住每个版本对应的SHA-1值
- 在Git中文件名并没有被保存-仅保存了文件内容
- 解决方案(树对象)
-
注意
6.树对象
我们可以通过update-index;write-tree;read-tree等命令来构建树对象并塞入暂存区
-
1、利用update-index命令为test.txt文件首个版本创建一个暂存区,并通过write-tree命令生成树对象 git update-index --add --cacheinfo 100644\92139012asdads(键值)test.txt
git write-tree
文件模式:
- 100644表明是一个普通文件
- 100755表明是一个可执行文件
- 120000表示一个符号链接
–add选项:因为此前该文件不在暂存区,首次需要–add --cacheinfo选项: ? 因为添加的文件位于git数据库中,而不是当前目录下所以需要–cacheinfo -
2、新增new.txt 将new.txt和test.txt文件的第二个版本塞入暂存区,并通过write-tree生成树对象 echo 'newfile' > new.txt
git update-index --cacheinfo 100644\isa21399sadasfo(键值) test.txt
git update-index --add new.txt
git write-tree
-
3、将第一个树对象加入第二个树对象中,使其成为新的树对象 git read-tree
--prefix=bak dasd09123sad12(键值)
git write-tree
read-tree表明可以把树对象读入暂存区 -
树对象相关操作
-
查看暂存区当前的样子 git ls-files -s
-
查看树对象 git cat-file -p master^{tree}(或者是树对象的hash)
-
返回 100644 blob 123aSdaasdakwqdai README 100644 blob 213asdilas123sdalda Rakefile 040000 tree 123sakduli2sadljndsa lib 以上hash都是随便写的,总之会与上方的hash值一致
7.提交对象
我们可以通过调用commit-tree命令创建一个提交对象,为此需要指定一个树对象的SHA-1值,以及该提交的父提交对象(如果有的话,第一次将暂存区做快照就没有父对象)
Git高层命令
CRUD
命令 | 作用 |
---|
git init | 初始化仓库 | git status | 查看文件的状态 | git diff | 查看哪些修改还没有暂存 | git diff --staged | 查看哪些修改以及被暂存了还没提交 | git log --oneline | 查看提交的历史记录 | git add ./ | 将修改添加到暂存区 | git rm 文件名 | 删除工作目录中对应的文件再将修改添加到暂存区 | git mv 原文件名 新文件名 | 将工作目录中的文件进行重命名,再将修改添加到暂存区 | git commit -a -m 注释 | 将暂存区提交到版本库 |
分支
命令名 | 作用 |
---|
git branch | 显示分支列表 | git branch 分支名 | 创建分支 | git checkout 分支名 | 切换分支 | git branch -D 分支名 | 强制删除分支 | git branch -d 分支名 | 删除空的分支,删除已经被合并的分支 |
Git存储
git stash命令
会将未完成订单修改保存到一个栈上,你可以在任何时候重新应用这些改动(git stash apply)
命令名 | 作用 |
---|
git stash list | 查看存储 | git satsh apply stash@{2} | 如果不指定一个储藏,Git认为指定的是最近的储藏 | git stash drop | 加上将要移除的储藏的名字来移除它 | git stash pop | l来应用储藏然后立即从栈上扔掉它 |
撤销&&重置
Git相关教程可参考
[Git 教程 | 菜鸟教程 (runoob.com)](Git 教程 | 菜鸟教程 (runoob.com))
|