Git的简介
Git的优点
- 分布式版本控制系统,不用联网也可以使用
- 分支管理功能强大
- 随着开源项目的流行,git也越来越流行。全球最大的同性交友平台(github)只支持git
Git的缺点
学习难度有点大,一些理论比较难理解
分布式与集中式
集中式
分布式
创建版本库
- 版本库的概念:可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来
- 版本库的创建
- 创建一个空目录
- 在空目录中执行git init命令
版本管理
- 工作区和暂存区
- 提交修改
- 撤销修改
- 查看状态和日志
- 版本回退
工作区和暂存区
- 电脑中看到的目录就可以认为是工作区
- 工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库
- 版本库中有区域叫做暂存区
提交修改
- git跟踪并管理的是修改,而非文件
- 创建一个新文件、修改文件中内容和删除文件都算作修改
- 提交修改
- 新建、修改或者删除一个文件readme.txt
- 新建或者修改文件时使用git add readme.txt 命令将文件添加到暂存区;删除文件时使用git rm readme.txt将删除修改添加到暂存区
- 使用git commit -m “修改readme"命令将修改确认提交
撤销修改
- 工作区撤销修改,使用git checkout -- readme.txt命令可以让文件回到最近一次add、commit时的状态,可以简单理解将版本库的文件替换工作区中的文件
- 暂存区撤销修改,使用git reset HEAD readme.txt命令撤销暂存区修改
- 撤销版本库修改,需要使用版本回退,前提是没有推送到远程库
查看状态
- 查看当前状态,使用git status命令,显示当前状态
- nothing to commit (working directory clean)表示当前工作区没有任何修改,和版本库一致的
- no changes added to commit (use "git add" and/or "git commit -a")表示修改了内容没有提交到暂存区
- # modified: readme.txt表示提交到暂存区未commit
查看修改和日志
- git diff readme.txt可以查看文件修改的内容,显示的格式正是Unix通用的diff格式
- 使用git log可以历史记录,同时可以看到每次提交的版本号
版本回退
- git每次commit都会生成一个版本,通过git log命令可以查看历史版本
- 用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本是HEAD^^,往上100个版本写100个^可以写成HEAD~100
- git reset --hard HEAD^代表回退到上一个版本,相当于回到过去
- git reflog查看每次命令的记录,可以回到回退之前的版本,相当于回到未来
远程仓库
- 远程仓库指的是运行git的服务器,可以用gitlab和github对git仓库进行托管
- 使用git remote 可以将本地仓库和远程仓库关联
- 使用git clone 可以将远程仓库复制一份作为本地仓库
分支
分支命令
- 查看分支:git branch
- 创建分支:git branch <name>
- 切换分支:git checkout <name>
- 创建+切换分支:git checkout -b <name>
- 合并某分支到当前分支:git merge <name>
- 删除分支:git branch -d <name>
分支策略
- master分支是整个项目的主分支
- develop分支反映最新的开发
- feather分支用于某个新功能的开发
- release分支用于准备新版本的发布。
- hotfix分支用于紧急bug修复
master分支
所有其他分支都直接或间接源自master。master分支只用于产品发布,不能在上面进行工作。
develop分支
- develop中的代码总是可以完整编译的。
- 当develop中的代码进入稳定状态(修复了绝大多数bug)准备release时,所有develop中的更改将通过release branch最终merge到master。
- master和develop分支要和远程仓库保持一致
feather分支
- feather分支用于某个新功能的开发,源自develop,并最终merge到develop。
- feather分支最终要么合并到develop 分支,要么被删除。
release分支
- release分支用于准备新版本的发布。源自develop,merge到develop和master。
- release分支仅修复小的bug,不能添加新功能。而develop分支可以同时开始新功能的开发。该分支上修复的bug需要merge到develop,并在该分支完成时merge到master。此时需要给master打上tag,标记这个新的release。
hotfix分支
- Hotfix分支用于紧急bug修复,源自master,merge到develop和master。
- 对于已经上线的产品,可能有意外的紧急bug需要修复。hotfix branch可以避免修复bug的工作影响develop 分支
分支示例
自定义配置
- 忽略特殊文件,使用.gitignore文件配置忽略的文件
- 配置别名, git config --global alias.st status
- 配置文件,每个版本库的配置文件是.git/config,每个用户的配置文件是在用户的主目录中的这个文件.gitconfig