这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。 1.命令
(1)设置global邮箱用户名
git config --global user.email "you@example.com"
git config --global user.name "your name"
(2)通过ID看内容
git cat-file -p xxxxxxxxxx
2.Objects
Blob:存储文件内容
Tree:存储文件的目录信息
Commit:存储提交信息,可以对应唯一版本的代码
通过Commit寻找到Tree的信息,每个Commit都会存储对应的Tree ID。
通过Tree存储的信息,获取到对应的目录树信息
从tree中获取blob的ID,通过Blob ID获取对应的文件内容
3.Refs
refs的内容就是对应的Commit ID
git checkout -b:创建一个新分支
git tag:生成tag(标签:指一个稳定版本,指向的commit一般不会变更)
附注标签:特殊的Tag,命令:git tag -a
4.追溯历史版本
Ref指向的Commit可以获取唯一的代码版本
Commit里存有parent commit字段,通过commit的串联获取历史版本代码
5.修改历史版本
commit-amend,修改最近一次commit,commit id会变
rebase:git rebase-i HEAD~3 可以实现对最近三个commit的修改,合并commit/修改具体的commit message/删除某个commit
filter--branch:指定删除所有提交中的某个文件或者全局修改邮箱地址等操作
6.Git GC
git fsck --lost-found:寻找浮空的commit
GC:通过git gc命令,可以删除一些不需要的object
Reflog:记录操作日志,防止误操作导致数据丢失
指定时间:git gc prune=now 指定的是修剪多久之前的对象,默认两周前
1.Git Clone & Pull &Fetch
Clone:拉去完整的仓库到本地目录,可以指定分支,深度 Fetch:将远端某些分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作 Pull:fetch+merge,也可以通过git pull--rebase完成git fetch + git rebase 操作。
2.Git Push
git push origin master:将本地代码同步至远端 git push origin master -f:强制推送
ps:fetch是将代码拉取到本地的远端分支,不会合并到当前分支
3.集中式工作流(Gerrit)
只依托于master分支进行研发活动
a.获取远端master代码 b.直接在master分支完成修改 c.与本地代码合并(rebase),解决冲突 d.提交代码到master
4.分支管理工作流(Git Flow/Github Flow/Gitlab Flow)
Github合作方式 (1)owner创建好仓库以后,其他用户通过Fork的方式来创建自己的仓库,并在fork仓库上进行开发 (2)owner分配权限,在一个仓库开发