GIT --local -branching-on-the-cheap

GIT官网地址

一、了解

GIT是什么??或者优势是什么?

1、git更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具;每次提交更新或者保存项目状态时,就会对当时全部文件创建一个快照并保存这个快照的索引;
2、近乎所有的操作都是本地执行:大多数操作只需要访问本地文件和资源,不需要其他网络上的信息;
3、保证完整性:git所有的数据在存储前都得计算校验和,然后以校验和来引用,校验和的机制SHA-1散列;
4、git一般都只添加数据:git几乎不会执行任何可能导致文件不可恢复的操作;

GIT三种状态:

1、已提交committed:表示数据已经安全的保存在本地数据库中;
2、已修改modified:表示修改了文件,但还没保存到数据库中
3、已暂存staged:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;

二、配置

git  config --global user.name "***"
git  config  --global user.email "*****"

查看配置命令:
git config --list --global	

三、命令

GIT基础

git init                 创建仓库
git status               查看状态   
git clone 'git仓库'  '本地目录名'    克隆仓库

git status  检查当前文件状态
	- git status -s/--short  状态简览,格式更为紧凑的输出
git add     跟踪新文件【处于暂存状态】
git diff	比较的是工作目录中的当前文件和暂存区快照之间的差异,只显示尚未暂存的改动,也就是未commit之前的变动
	- git diff --staged 比较已暂存文件与最后一次提交的文件差异
	- git diff --cached 比较已暂存起来的差异
	- git diff -- '文件名'  只显示某一文件的差别
git commit 提交更新
	- git commit -m'备注'
	- git commit -a 自动把所有已跟踪过的文件暂存起来一并提交,省去了git add步骤
	- git commit -amend 修改最近一次提交的历史记录
git rm 移除文件:包括工作目录和暂存区域
git mv 移动文件/重命名

忽略文件:创建一个名为.gitignore的文件,然后列出忽略的文件的模式;
	- *:匹配零个或多个任意字符;
	- [abc]:匹配任何一个列在方括号中的字符;
	- ?:只匹配一个任意字符
	- [0-9]:匹配所有0-9的数字


git log 查看提交历史
	- git log -p 
	- git log --oneline  
	- git log --graph



撤销操作
git reset HEAD '文件名'  取消暂存的文件
	- git reset --hard^  回退一个版本
	- git reset --hard 'SHA-1名' 回退到某个版本
git checkout -- '文件名'  撤销对文件的修改


远程仓库的使用
git remote   查看远程仓库
	- git remote -v
	- git remote show '仓库名'   查看某个远程仓库
git remote add '仓库名' url   添加远程仓库
git fetch '仓库名'   从远程仓库中抓取和拉取,只是将数据下载到本地仓库,并不会主动合并或者修改当前的工作目录
git pull   抓取数据并自动合并到当前所在的分支
git push '仓库名' '分支'  推送到远程仓库
git remote rename  '旧仓库名' '新仓库名' 重命名远程仓库
git remoute remove/rm  '仓库名'    移除远程仓库



打标签
GIT 支持两种标签:轻量标签与附注标签
git  tag 列出标签
	- git tag -l/--list
git  tag -a '标签名'  创建附注标签
git  tag  '标签名'  创建轻量标签
git show '标签名'  查看打标签信息
git tag -d '标签名'  删除标签

git push命令并不会传送标签到远程仓库服务器上,所以创建完标签后必须显式的推送标签到远程上
git push '远程仓库名' '标签名'  推送一个标签
	- git push '远程仓库名' -- tags 将所有不在远程仓库服务器上的标签全部传送
git push '远程仓库名' --delete '标签名' 删除远程标签
分支管理

HEAD指向当前所在的分支

git branch '分支名'  创建分支
	- git branch -v
	- git branch -merged   已合并到当前分支的分支
	- git branch -no-merged    尚未合并的分支
git checkout '分支名' 切换分支
	- git checkout -n '分支名' 创建一个新分支后立即切换过去
git branch -d/-D  删除分支

修复命令
git stash 把当前的工作隐藏起来,以后恢复现场后继续工作
git stash list查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop恢复文件的同时也删除文件

GIT --local -branching-on-the-cheap_第1张图片

BUG修复
开发过程中需临时修复BUG过程

1、在当前开发的分支(test):git stash(把内容隐藏起来)
2、确定去哪个分支修复bug,切换过去并创建临时分支:git checkout master  /   git checkout -b fix
3、修复内容
4、添加
5、提交
6、合并分支:将新建的分支合并到主分支上:git merge fix
7、删除临时分支:git branch -d fix
8、切回到最开始开发的分支:git checkout 
9、恢复开发分支的内容:git stash pop(或者git stash apply:恢复stash内容并不删除,还需git stash drop 删除) 

GIT --local -branching-on-the-cheap_第2张图片
GIT --local -branching-on-the-cheap_第3张图片
GIT --local -branching-on-the-cheap_第4张图片

四、概念

变基
原理:找到这两个分支的共同祖先(当前分支和变基操作的目标基底分支),然后对比当前分支相对于祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底,最后以此将之前另存为临时文件的修改依序应用;

变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起;

五、内部原理

GIT对象

位于 .git/objects 文件
git都得核心部分是一个简单的键值对数据库,你可以向GIT仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以再任意时刻再次取回该内容。

1、git hash-object
在这里插入图片描述

GIT --local -branching-on-the-cheap_第5张图片

GIT --local -branching-on-the-cheap_第6张图片
2、find .git/objects -type f查看objects目录![](https://img-blog.csdnimg.cn/e685bd4863e448b0ae6993734430be51.png)
3、git cat-file -p ‘SHA-1校验和’ 文件内容
在这里插入图片描述
4、git cat-file -t ‘SHA-1校验和’ 内部存储的对象类型
在这里插入图片描述

GIT引用

位于.git/refs
GIT --local -branching-on-the-cheap_第7张图片

1、HEAD引用

GIT是如何知道最新提交的SHA-1值呢?答案就是HEAD文件。
HEAD文件指向目前所在的分支,通常是一个符号引用(表示它是一个指向其他引用的指针)。
GIT --local -branching-on-the-cheap_第8张图片

2、标签引用
GIT --local -branching-on-the-cheap_第9张图片
3、远程引用
远程引用是可读的,虽然可以git checkout到某个远程引用,但是GIT并不会将HEAD引用指向该远程引用,索引你永远不能通过commit命令来更新远程引用;
GIT将远程引用作为记录远程服务器上各分支最后已知位置状态的书签来管理

GIT包文件

GIT时常会自动对仓库进行重新打包以节省空间。或者随时执行git gc命令来这么做;
git gc --auto:手动执行自动垃圾回收

GIT数据恢复

git reflog 引用日志,每一次提交或者更新,引用日志也都会更新
引用日志只存在于本地仓库,它只是一个记录你在自己的仓库里做过什么操作的日志
GIT --local -branching-on-the-cheap_第10张图片

你可能感兴趣的:(工程化专题,git,github)