这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。
Git简介
是一种分布式版本控制系统,每个仓库都能记录版本历史,可以解决只有一个服务器保存版本的问题。
SSH配置
$ ssh-keygen -t rsa -C "youremail@email.com"
生成的.ssh目录下,id_rsa是私钥,而id_rsa.pub就是公钥。ssh公钥私钥同时生成且唯一配对。
进入Github,在Your profile里,点击左边SSH keys,再在右边点击Add SSH key按钮,如图:
即可完成配对
常见命令使用
- git commit -amend 可以修改最近的commit信息,修改以后commit id会变
- git rebase 合并commit;修改具体的commit message; 删除某个commit
- git filter -branch 可以指定删除所有提交中的某个文件或者全局修改邮箱等操作
- git clone 拉取完整的仓库到本地,可以指定分支和深度。
- git fetch 将远端的分支最新代码拉取到本地,不会执行merge操作,会修改refs/remote内的分支信息,如果要和本地代码合并需要手动操作。
- git pull 拉取远端某分支,相当于git fetch + git merge
github分支管理工作流(Git-Flow)
本小组青训营项目采取的工作流 对
- 包含五种类型的分支 Master、Develop、Feature、Release、Hotfix
- 只有一个主干分支,基于PR往主干分支提交代码
- owner建好仓库后,其他用户通过fork来创建仓库,并在创建的分支上进行开发。
- PR页面可以进行CI\CA\CA等操作,并且可以进行一些保护分支设置。
- 尽量保证少量多次
- 保证每次有CR后合入
- 主干分支尽量保持简洁,使用fast-forword合入,并且合入前进行rebase
fast-forward合入和three-way merge的区别
fast-forward
效率更高的合入方式,不过有个缺点,被合并的分支,它的提交历史在合并以后会和master分支的提交历史重合。
three-way merge
三方合并 会创建新的merge节点
- 这里的三方指的是什么? 首先,它会在两个分支上分别找到head指针(又被称为branch tip)所对应的提交。然后,找到距离它们俩最近的“共同祖先”,然后进行Three-Way Merge。