Git是什么?
Git是一种分布式版本控制系统,可以对代码进行分支、合并操作,查看代码的修改历史和不同版本,提高团队协作开发的效率.
什么是版本控制?
记录文件的修改,包括内容的修改、谁修改的、什么时候修改等等,从而形成一条条记录,或者说版本,可以根据需要回滚到特定版本
版本控制类型
- 本地版本控制
- 集中式版本控制
- 学习成本低
- 支持二进制文件存储
- 代码集中管理控制
- 分布式版本控制
为什么要学习Git?
- 协同工作:绝大多数公司的代码管理都是基于Git
- 参与开源项目:绝大多数的开源项目也都是基于Git维护的
Git的区域
- 工作区:项目文件夹,尚未被commit
- 暂存区:已commit,也做好了push的准备,
- 本地库:存储在本地计算机上的Git仓库,负责项目的版本控制、记录项目的历史变更、处理分支操作等
- 远程库:主要指第三方代码托管平台,主要是指Github
常见Git配置命令
用户配置
- git config --global user.name "lizh"
- git config --global user.email "lizh@Git.com"
别名配置
- git config --global alias.cin "commit --amend --no-edit"
仓库配置
- git remote add origin-SSH git@Github.com:git/git.git
提交代码
- 提交到暂存区
- git add
- 提交到本地库
- git commit
- 提交到远程库
- git push
- 远程库克隆到本地库
- git clone
修改历史版本
- 修改最近一次commit
- git commit --amend
- 实现对最近三个commit的修改
- git rebase -i HEAD~3
Clone & Pull & Fetch
- Clone 拉取远程仓库到本地库,可以指定分支
- Fetch 用于从远程仓库获取最新的提交记录和代码文件,但不会合并到本地仓库的当前分支上
- Pull 拉取远端某分支,并和本地分支合并,可能存在冲突,需要解决冲突
Object
- Blob(文件对象):代表数据,通常以文件名和内容的哈希值作为其唯一标识符
- Tree(目录对象):代表目录结构,包含一个或多个Blob或Tree对象,有唯一一个哈希值标识自己
- Commit(提交对象):代表一次修改的提交,
- Tag(标签对象)
- 使用
git cat-file -p <object-hash>命令可以查看指定对象的内容、类型等信息
研发流程
分支管理工作流
- Git Flow:分支类型丰富,规范严格
- Github Flow:只有主干分支和开发分支,规则简单
- Gitlab Flow:在主干分支和开发分支之上构建环境分支,版本分支,满足不同发布or环境的需要
GitFlow
- Master:主干分支
- Develop:开发分支
- Feature:特性分支
- Release:发布分支
- Hotfix:热修复分支
GithubFlow
选择团队合作的方式
- owner创建仓库,其他用户通过Fork的方式来创建自己的仓库并进行开发
- owner创建仓库,给团队成员分配权限,在同一个仓库协作开发