01、git暂存原理
- 每个文件SHA-1校验和
- 使用blob对象保存当前版本文件快照到git仓库
- 将校验和加入暂存区域等待提交
02、git提交原理
- 树对象:计算每个子目录校验和,在git仓库中保存这些校验和为树对象
- 提交对象(commit object):git会保存一个提交对象,包含暂存内容快照的指针、作者姓名、邮箱、提交信息、父对象指针(首次提交不存在,合并分支时可能有多个)、指向树对象根目录的指针
03、git非首次提交(提交对象会包含父对象)
04、git分支本质(41个字节=40提交对象SHA-1 + 1换行)
指向提交对象的可变指针,每次提交都会自动向前移动
05、创建分支
$ git branch testing (在当前提交对象上创建一个新的可变指针)
06、HEAD分支
指向当前本地所属分支
07、查看分支
$ git log --oneline --decorate --graph --all (查看提交对象 & 对应分支)
08、切换到已存在分支
$ git checkout <branch> (切换HEAD指针到指定分支,并将工作区切换)
09、新建并切换到新建分支
$ git checkout -b <branch>
10、合并分支
$ git merge <branch> (将branch分支合并到当前分支)
-
- 快进(fast-forward):当前分支是merge分支的祖先级别分支,会直接快进,不会创建新的提交
- 三方合并:找到2个分支共同的祖先,三方合并
11、冲突解决
$ git status (查看Unmerged paths包含所有冲突文件,打开文件编辑冲突)
$ git mergetool (图形化工具解决冲突,退出后,git会询问冲突是否解决,若选择是,git会暂存解决的文件)
直接编辑冲突文件,然后git add <file>,然后提交
12、删除分支
git branch -d <branch> (仅删除本地,若分支内容未merge,则需要用-D删除)
git push <remote-name> --delete <branch-name> (删除远程分支,不能删除远程默认分支)
13、查看分支
git branch (查看本地分支列表,带星号的表示检出分支)
git branch -v (查看本地分支列表 & 最后一次提交)
git branch --merge (本地已经合并到当前分支的分支,包含当前分支)
git branch --no-merge (本地未合并到当前分支的分支,使用git branch -d删除时会报错,需用-D强删)
git branch -a (查看本地分支 & 远程分支)