命令讲解:
git的四个组成部分:
- 工作区(工作目录)
- git add . 提交暂存区
- 暂存区
- git commit -m '注释' 提交历史仓库
- git chechout 撤回
- 本地历史仓库
- git push origin master 提交远程仓库
- origin 代表远程主机名标识
- git chechout HEAD 撤回
- git push origin master 提交远程仓库
- 远程仓库
- 具体可以看下图:
git和SVN的差异:
- git
- 协同开发比较号
- 随着时间增加:同步增量的时候,不保存增量信息,只保存总的快照信息,通过指针去操作速度快
- svn
- 协同开发弱
- 随着时间增加:增量保存,耗时慢
命令详解:
- ls -la 查看隐藏文件
- git -help add 查看帮助
- git status 查看操作状态(红色是没有被提交)工作区
- git add . 全部加入可以提交到暂存区域
- git reset HEAD (file)
- git commit -m '注释' 提交本地库
- 三个区域概念
- 本地库,暂存区,工作区
- pull request(pr)
- HEAD
- 当前commit(类似记录)的引用,类似头指针
- master
- 默认的分支
- git branch -v 查看远程分支
- branch
- 分支
- git clone 把远端仓库的项目下载下来
- git checkout -b 【分支名字】 创建分支,并且切换到这个分支
- git checkout master 切换分支
- git branch -d [feature] 删除分支(假删除,是删除引用)
- 什么是引用
- 就是一个字符串就是一个hash值,使用SHA-1做的一个加密,所有的引用都是在.git目录中的
- git push 提交远程仓库
- 快照原理
- commit会产生hash值(还有个树和树指针),有一个指针对指向一个区域(存的是原始信息文件),每一个文件也有一个hash值,通过hash值可以找到你的原始文件
- 每一次commit提交,当前的快照parent(起源),指向的是上一版本的hash值
- git回退操作
- git reset -onto 目标 commit 起点commit 终点commit 版本回退
- git reset -onto 第三个commit 第4个comit branch1分支
- git reset --soft 本地库会移动一下回退上一版本,其他两个区域不变
- git reset --mixed 本地库头指针下移动,重置暂存区,工作区不变
- git reset --hard 全部区域下移动,重置 保持跟本地库一样
- git reset --hard HEAD^ 后退一个版本
- git reset --hard HEAD^^后退二个版本
- git reset --hard 【hash值】******************最好使用这个
- git reflog 查看移动版本的记录
- ------------------------------------
- git revert
- 会增加一个新的分支,内容和回退的版本一样
- ------------------------------------
- git chechout
- 覆盖原来的内容
- git log 查看日志commit日志
- git log --pretty=oneline 简单日志更漂亮
- git log --oneline 更简单的命令
- ^和~
- ^是回退版本
- ~可以加数字,回退几个版本
- 如图:
- git rebase master 变基,找基点,把两条分支合并到一个基点
- 变基过程
- 建议不要轻易用
- 这个会直接合并到基分支
- 变基过程
- git merge brabch1 多条分支还会存在的,只是合并了
- 合并分支
- 冲突解决:解决冲突,手动commit
- commit--fast-forward 自动快速前进
- git pull 底层就是用了 fetch merge
- git commit --amend 在不添加commit记录的情况的,进行提交
- git revert 使用后增加一条记录,reset 则不会。撤销 某次操作
- git chechout 切换分支而已
- chechout 不会移动分支指针的,reset是会的
- git stash 临时存放工作目录的隐匿
- git stash
- git stash pop 回到暂存区,给弄回来
- git stash -u
- git强制覆盖:
- git fetch --all
- git reset --hard origin/master
- git pull
git开发流程协同作业(git flow):
git命名规范:
开发阶段:
开发新需求都从master拉取feature分支,不同迭代发布代码使用不同的分支,避免相互影响。需要进行开发环境联调的代码合并到develop分支,由jenkins自动发布到开发环境。
命名方式: dev-mmdd(时间)-需求名称,例如: dev-1205-xxxx
测试阶段:
每月为一个迭代周期由系统owner拉取提测分支test,并定期维护(merge master).开发feature分支合并到提测test分支,合并前需要由模块负责人进行review或交叉review.多个feature分支在测试过程中,需要借助release分支来进行合并,然后再进行提测。多个feature分支在测试过程中,某一个需求不能如期发布,需要将release分支删除,将可继续的分支重复执行第2步进行测试验证:
命名方式: test-mmdd(每月10日),例如: test-1215 / release-mmdd(每月10日),例如: release-1210
发布阶段:
测试通过后release进行merge master,并解决冲突,在release分支回归测试回归通过后,先在master分支拉取tag分支备份,然后把release合并到master.发布master
命名方式: tag-mmdd(时间),例如: tag-1212
以上就是使用一些git的心得,具体的内在原理还是需要大家看一下源码。有其他需要修改的希望大家告诉我,我在持续维护,也是给自己一个学习的机会。