这是我参与「第三届青训营-后端场」笔记创作活动的的第2篇笔记
概念
-
对象
-
Commit:包含提交的信息及指向Tree的指针
-
Tree:存储目录,包含指向Tree和Blob的指针
-
Blob:存储文件,包含文件内容
-
Tag: 附注标签,包含指向其他对象的指针
-
-
对Commit的引用
类型:
-
SHA-1值:Commit的标识符,可以用其四位及以上的前缀替代(只要无冲突)
-
branch:指向一个Commit的指针,可以移动
-
tag:指向一个Tag或Commit的指针,固定的别名
-
HEAD:指向当前branch或当前Commit的指针 -
@{u}:HEAD分支的上游分支
运算:
-
C^:C的父Commit
-
C~N:C的第N个祖先Commit
-
-
三个目录
-
HEAD(已提交)
-
index(暂存区)
-
沙盒(工作目录)
-
命令
仓库创建
-
git init;初始化仓库 -
git clone;克隆仓库,即git init,git remote add,git fetch,git checkout
基本工作
-
git status:查看当前状态-s:短格式
-
git diff:查看状态差异- 默认:比较工作目录和暂存区
--cached:比较暂存区和HEAD提交
-
git log:查看提交历史--stat:显示内容变化的统计信息-p:显示内容变化-n:只显示最近n次提交--pretty=:指定格式,如online,format:--graph:显示分支历史
-
git show:查看对象信息--stat:显示内容变化的统计信息--pretty=:指定格式,如online,format:
-
git add:添加文件或目录到暂存区-A:添加所有文件-i:交互式
-
git commit:将暂存区提交-m:提交消息-a:提交前添加已追踪文件的修改到暂存区--amend:修改上一次提交
-
git stash:管理储藏- 默认:储藏工作目录和暂存区相对于HEAD的修改
-m:提交时附带信息--keep-index:提交时不储藏暂存区-u:提交时包含未追踪的文件apply:应用储藏--index:应用时恢复暂存区list:列出储藏pop:删除并应用储藏drop:删除储藏
-
git tag:管理标签- 默认:列出标签,或创建轻量标签到HEAD提交或指定提交
-l:查找标签-a:创建附注标签到HEAD提交或指定提交-m:附注标签消息
-
git rm:删除文件- 默认:从工作目录和暂存区删除
--cached:从暂存区和HEAD提交删除-r:递归删除-f:强制删除
-
git mv:移动和重命名文件,即mv,git rm,git add -
git reset:移动HEAD分支到指定提交(如果指定提交),以及替换索引区的全部或指定文件为新的HEAD--soft:移动HEAD和HEAD分支- 默认:移动HEAD和HEAD分支,然后替换暂存区
--hard:移动HEAD和HEAD分支,然后替换暂存区,并且替换工作目录- 特别地,若无指定分支,则替换工作目录为暂存区
分支
-
git checkout:移动HEAD到指定提交,并替换索引区和工作目录-b:创建新分支,移动HEAD到该分支-t:创建新分支并指定上游分支(可以用-b指定名称),移动HEAD到新分支
-
git branch:管理分支- 默认:列出分支,或创建新分支到HEAD或指定提交
--all:包含远程分支-v,-vv:显示分支信息-t:指定上游分支-u:重设上游分支-m:重命名分支-d:删除分支
-
git merge:合并分支 对当前分支所处提交、目标分支所处提交、当前分支和目标分支的公共父提交进行三方合并,形成一个新提交;若有冲突则需要手动解决后提交;若当前分支和目标分支间具有祖先关系,则会进行快速合并 -
git mergetool:提示合并冲突 -
git rebase:重新排序分支 将当前分支自与目标分支分叉以来的所有提交,改为作用于目标分支所处提交。(删除这些提交,并分别形成新的提交)--onto:指定变基起点提交、变基终点提交、目标提交-i:交互式,可以编辑历史提交,将编辑后的提交序列作用于目标提交--amend:修改正在编辑的提交--continue:完成正在编辑的统计
-
git cherry-pick:将指定提交作用于当前分支,形成新提交 -
git revert:将指定提交的相反效果作用于当前分支,形成新提交-m:有多个父提交时,指定其中一个被保留-n:不创建新提交,仅更换工作目录 -
git fetch:从远程仓库拉取分支或标签,默认当前分支拉取其上游分支--tags:同时拉取标签--all:推送所有分支
-
git pull:拉取并合并上游分支,即git fetch,git merge--rebase:使用git rebase替换git merge
-
git push:推送分支或标签到远程仓库,默认当前分支到其上游分支--tags:同时推送标签--all:推送所有分支--delete:删除远程分支
-
git remote:管理远程仓库- 默认:列出远程仓库
-v:显示远程仓库信息add:添加远程仓库rm:删除远程仓库rename:重命名远程仓库set-url:修改远程仓库地址show:显示远程仓库信息update:更新远程仓库