引言
Git 是一个用于管理项目源码的软件,可以用于:
- 新建分支开发新功能(branch)
- 回滚代码到指定版本(commit)
- 同步本地代码和远程仓库(remote)
安装
- 下载安装 here
- 命令行安装
使用
下面按 Git 功能来解释 Git 概念,以及一些简单的 Git 命令。
现在有个新项目,需要依次实现 a、b、c三个功能。
- 新功能开发
新功能很容易实现,新建项目 P,在项目 P 上开发功能 a
|
|
可以把项目理解为最初的起源(origin),每个分支(branch)代表项目的一种可能性,分分支与分支间彼此隔离互不干扰。
- 变更项目需求,优先开发功能 b
此时功能 a 开发到一半,需要将功能 b 优先级提前,功能 a 暂时搁置,但要删掉后重新开始吗?但功能 a 后面还是要完成的。因此,考虑将功能 a 暂存,重新开始开发功能 b。
|
|
git add .
:此项目(准确来说是当前文件夹)的所有变更都添加进来
git commit -m "Pause a"
:为此次变更生成一个版本并添加信息记录变更内容此时回顾上一小节,如果当初 master 分支只有基本的项目框架,开发功能 a 时新建分支 feature/a 是否更合理?
- 项目要赶进度,协调新同事来完成功能 a
两个人该怎么协同合作一块完成项目呢?将代码拷贝一份给同事吗?但这样两个人如果修改了同一份文件,到时怎么合并?怎么确认同事只在分支 a 上完成?能否提供一个公共目录,自己和同事的项目都可以随时与其同步?
这就是远程仓库(remote):远程仓库是一个部署在服务器上的代码仓库,供多人协作完成项目,可以随时推送(push)和拉取(pull)源码。
推送项目到远程仓库:
|
|
origin
是地址https://github.com/xxx/P
的简称,这表示一个项目可以有多个远程仓库地址(免费版 && 收费版)
git checkout [分支名]
:根据分支名进行分支切换
git push origin --set-upstream [分支名]
:将本地分支推送到origin/[分支名]
并进行关联
同事拉取项目并继续开发功能 a
|
|
clone 到本地的项目默认分支一般为 master(可以在远程仓库中设置)
- 功能 a 和 b 开发的差不多了,要开始合并为一个分支并上线。该怎么操作呢?先将分支 a 合并到 master,然后再将分支 b 合并过去,如果两个分支更改了同一份文件,就需要解决文件更改冲突的问题了。
|
|
合并期间 master 分支不稳定(不确定会不会有分支冲突)
- 此时 master 分支可以去提测了,在提测的时候需要继续开发功能 c,该怎么做?
继续在 master 分支上进行修改吗?虽然可以,但不建议这么做:
- 测试出现问题时需要修复
- 万一又有新功能 d 需要实现呢
所以应该在 master 上新建分支 c 进行开发。同时在提测后应该暂时冻结分支 master,避免测试发现问题后找不到对应的版本。那么有什么好办法用于冻结分支 master 呢?不妨使用 git tag 命令。
|
|
其实上述方法中有些操作可以改进:
- 一开始就在 master 上新建分支 a 进行开发
- 为保持 master 分支的稳定,引入新分支 develop 充当 master 分支的不稳定版本(预览版本)
- 规范分支名称
master
:主分支。维护项目稳定代码,每个tag
都表示一个稳定的服务版本。
develop
:开发分支。用于 checkout [功能|修复]分支和 merge [功能|修复]分支。develop
分支测试无误后就可以合并到 master 分支并上线。
feature
:功能分支。用于开发新功能。
fix
:修复分支。用于修复 develop
分支在测试时遇到的问题。
重新梳理后,可以按如下方式进行:
上述流程是一个比较流行的 Git 分支和项目开发流程,但也需要考虑如下情况:
- 在
develop
分支测试时,此时feature
分支能否合并进来?如果合并进来后该怎么处理可能存在的fix
分支?
方案一:feature 分支要在 develop 分支测试完成后再合并
方案二:feature 分支合并进 develop 分支后重新提测
方案三:放松片刻,不用着急开发新功能
- 如果线上服务出现问题需要修复,该怎么做?
在 master 分支上 checkout 一个 fix 分支修复线上问题,测试无误后合并到 master 分支,然后将 mater 分支合并到 develop 分支。
总结
其他常用命令:
|
|
名词解释:
- 工作区:修改后没有执行
git add xxx
命令,可还原(git restore xxx) - 暂存区:
git add xxx
后文件从工作区转移到暂存区,可撤销(git restore –staged xxx) - 本地仓库:
git commit -m "xxx"
后文件从暂存区转移到本地仓库,可回滚(git reset xxx 或 git rebase xxx)
以上只是 Git 工具和命令的基础部分,还有很多其他优秀的功能和命令,因本人精力有限,无法在此详细编写,特此推荐以下优秀书籍和项目: