本文内容
- Git 核心特点
- Git文件状态、所处区域
- 分支
- 常用命令
Git 核心特点
分布式:每个本地仓库都有完整的项目文件和目录(含各个版本),本地操作更有效率,主库损坏时可从其他仓库里取数据进行恢复
直接记录文件‘快照’,而非记录文件不同版本间的内容变化
指针字串:每个文件修改后会进行校验和计算,得到一个40 个十六进制字符的串,作为该文件的标识和索引
Git区域
Git目录:一个项目就是一个Git目录,含.git文件,是保存元数据和对象数据的地方,克隆时就是复制这个目录
工作目录:从Git目录中取出某个版本的所有数据,以便后续进行修改
暂存区域:准备提交的修改文件列表,只是一个索引文件,指向所有修改过的文件快照
本地仓库:持久化所有文件快照的地方
Git文件状态
未追踪:新放入Git目录的文件,尚未有任何版本信息
未更新
已修改(modified):修改了某个文件,但还没有提交保存,处于工作目录
已暂存(staged):把已修改的文件放在下次提交时要保存的清单中,处于暂存区域
已提交(committed): 文件已被保存到本地仓库
分支
目的:从开发主线上分离开来,然后在不影响主线的同时继续开发任务
特点:非常轻量,本质上仅仅是个指向 commit 对象的‘可变指针’
在 Git 中提交时,会把修改文件进行快照得到一个blob结构,对目录生成tree对象(包含指向其中修改文件快照的指针),
还会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针(tree对象)、 包含指向上次提交对象指针
下左图是一个commit对象的数据结构,右图是多个提交对象之间的关系
HEAD指向当前分支指针,标识工作目录的当前分支
分支合并
- merge:利用两个分支的末端 以及它们的共同祖先 进行一次三方合并计算,得到一个新的提交
- 合并效果:
- rebase:把其中一个分支里做的操作对另一条分支的末端再做一遍,
- 原理:
- 回到共同祖先,把历次提交生成生成一系列补丁,
- 然后以另一条分支末端的提交为基点,重写应用这些补丁
- 生成一个新的提交对象
- 用途:让提交历史变成一条直线,更干净
- 缺点:如果分支中与多个提交,可能得每个提交解决一次冲突,可以用-i参数合并提交
- 合并效果:
常用命令
创建git仓库
- git init 将一个目录变为git仓库
- git clone [url] 克隆git仓库
记录更新到仓库
- git add 对文件进行追踪(将其纳入git管理)
- git rm 移除文件追踪
- git mv 文件改名
- git status 查看文件状态,还会显示分支
- git diff 看暂存前后的变化
- git commit 提交
查看提交历史
- git log
- -p 展开每次提交的内容差异
- --stat 显示行数统计
撤消操作
- git commit --amend 修正上一次的提交
git commit 'hi' git add test git commit --amend //三个命令只会产生一个提交,--amend相当于对第一个提交做修正,修正的东西就是两次提交间隔的内容
- git reset HEAD <file> 取消暂存文件
远程仓库
- git remote -v 显示远程仓库克隆地址
- git remote add [shortname] [url]
- git fetch [remote-name] 从远程仓库拉取本地仓库中还没有的数据(不合并)
- git pull [remote-name] 拉取并合并到工作目录的当前分支
- git push [remote-name] [branch-name] 推送分支到远程仓库
分支
- git branch 创建分支
- git checkout 切换分支
- git merge
- git rebase
子仓库
- git mondule init
学习自 Pro Git(中文版)