1 git简介
版本控制:是指通过记录软件开发过程中的源代码。配置工具环境,数据等的历史信息,快速重现和访问任意一个修订版本。
版本控制是团队协作交付软件的基础,应支持团队间所有变更历史的详细信息查询及共享,包括修改人员,修改时间,文件内容以及注释信息等,通过有效信息共享,加快问题定位和沟通协作效率。
需求:1 记录变更 2 合并,冲突检测 3 多分支
历史:
1992 -linux系统
2002年-bitkeeper,期间手工合并源码
2005年合作破裂,之后开发了git
2008 github上线
对比:
svn-集中式版本控制
git-分布式版本控制,local repository,本地开发即可,需要的时候去和远端更新
![](https://img.haomeiwen.com/i13799508/7b67fb3130ba1ee8.png)
2 git大特性
- 分布式
- 近乎零成本的分支管理,git中分支是指针形式
- 真正的版本控制系统,借鉴linux系统
- 功能强大
- 开源免费
3 专业术语
-
本地库(本地),缓冲区(缓存,加快效率),中心库(远程集中式仓库)
图片.png
-
commit(sha1):40位的哈希值,用于代表一个完整的快照,唯一的
图片.png
上面的是svn的更新方式,版本2中A和C文件都有改动,svn只记录差异,当我们获取版本2时,需要先将版本1获取,再增加版本2的差异,这样效率会比较低。
git每个版本就是一个完整的快照状态,考虑:会不会有冗余的存储,设计的时候有考虑,内容是一样的即使名字不一样也是指向的同一文件,不会有太多的复杂运算,效率高 - HEAD:当前处于激活状态的最新提交
- remote:远程仓库
4 git命令
配置用户信息,开启颜色显示
$ git config --global user.name "your name"
$ git config --global user.email "you email"
$ git config --global color.ui auto
上面配置会写入到.gitconfig 目录:/c/Users/daisy
配置ssh协议连接,私有项目
ssh-keygen -t rsa -C "your identity message"
基本命令
$ git init //基于目录创建本地库,会创建.git隐藏目录
$ git status //查看状态,红色代表未纳入版本控制的文件
$ git log --oneline //简略的查看log信息
$ git log --oneline --decorate --all --graph //图形化查看
$ git merge fetch1 //当前在master分支下,将fetch1上的所有改动merge到master下,这个时候很容易出现冲突,git status可以查看你冲突的内容,所以尽量一些小的改动就merge到master分支上,修改后加入缓冲区再提交
$ git cherry-pick -s -x e016f48
//cherry-pick 仅仅将需要的代码提交,-s添加签名信息 -x归溯信息 commit也可添加这个,如图,git log查看时会多一些签名信息
$ git revert e016f48 //revert把一些提交入库的命令回退
$ git rebase -i master //打开后显示注释信息,并修改那些提交那些删除,相当于fetch2中的分支历史转移到master上,就像是基于,matser分支修改的一样,rebase会识别出来之前,跳过cherry -pick的提交rebase 分支数,parent,merge是所有的,cherry-pick是一个一个的,rebase是批量的cherry-pick
可以把提交历史整理的非常规整
$ git push origin test //将本地分支push到远程分支,单单git push会有提示,此时远端就有test这个分支了
$ git fetch origin //拉取远端的改动
5 git使用标准
基本顺序
你修改好了代码,先要提交
git commit -am “commit message"
然后有两种方法来把你的代码和远程仓库中的代码合并
a. git pull这样就直接把你本地仓库中的代码进行更新但问题是可能会有冲突(conflicts),个人不推荐
b. 先git fetch origin(把远程仓库中origin最新代码取回),再git merge origin/master(把本地代码和已取得的远程仓库最新代码合并),如果你的改动和远程仓库中最新代码有冲突,会提示,再去一个一个解决冲突,最后再从1开始
如果没有冲突,git push origin master,把你的改动推送到远程仓库中
七步工作法
![](https://img.haomeiwen.com/i13799508/2f724b8c362380bd.png)
- 获取代码
- 多次进行开发验证
- 本地提交commit,加上-s参数增加签名信息
- 更新主干 rebase,rebase之前git pull --rebase先更新再rebase,有冲突调试
- 提交 commit-amend
- push主干分支,先提交到代码评审分支(merge request)
- 合并主干分支 merge
分支策略
1 每天像主干合并一次代码
2 让分支的生命周期尽量的短(少于一天)
3 同一时间少于三条活跃分支
4 避免使用代码线锁定的方式进行被动管理
网友评论