0.理想状态
现状 | 听完后的理想状态 |
没使用过 git | 知道 git 是什么,会用 git 基础流程命令 |
用过 git,但只通过图形化界面操作 | 脱离图形化界面操作,通过 git 命令操作 |
会 git 命令 | 掌握 gitflow 规范,合理使用 rebase 和解决代码冲突问题 |
1.Git 的基础流程&命令
1.1 基础概念
工作区:代码生产基地,pycharm、vscode
暂存区:暂时存放修改/创建/删除的文件,工作区和本地仓库之间的中间商,最终目的:建立 git 索引,可以让 git 追踪文件
本地仓库:存储项目历史记录的地方,包含了项目的完整版本历史,包括所有提交的快照、分支、标签等
远程仓库:github、gitlab 等团队共享代码的中心存储库
1.2 基础流程
比拟理解 git 基础流程
git 命令流程
# 修改/增加/删除文件....
# 查看工作区状态
git status
# 提交到暂存区
git add .
git add test.txt
# 提交到本地仓库
git commit -m "提交信息"
查看工作区状态
未追踪和已追踪的区别
已追踪的文件:在之前的提交中已存在或已通过git add命令添加到过暂存区的文件
未追踪的文件:一般就是新建的文件或者改名了的文件,还没有执行过git add的文件,所有 git 操作对未追踪文件均无效
提交至暂存区:
提交至本地仓库:
1.3 回滚操作
分三种场景:
1、工作区回滚
2、暂存区回滚
3、本地仓库回滚
工作区回滚:
git checkout .
git checkout test.txt
git checkout -- test.txt
会抛弃已有修改
暂存区回滚到工作区
git reset HEAD
本地仓库回滚暂存区:
本地仓库回滚工作区:
git reset --mixed HEAD~
git reset HEAD~
git reset --mixed HEAD~1
git reset --mixed $commit_id
~ 的含义
● ~ 表示 HEAD 的父提交
● HEAD~ 和 HEAD~1 等价
● ~2表示 HEAD 的父提交的父提交,表示上上个提交
删除所有提交内容(慎用)
commit 信息和工作区内容都会被删除
1.4 切换分支
# 切换分支
git checkout 分支
# 创建分支
git branch
git checkout -b 分支
2.单分支模型
2.1 适用场景
个人佛系项目
2.2 基础流程
直接在 master 分支上开发
# 1. 拉取代码
git pull
# 2. 进行开发
...
# 3. 提交代码
git add .
git commmit -m "update"
git push
3.双分支模型
3.1 适用
● 生产/开发模型,一般分:master、devlop
● 个人规范项目,团队佛系项目
● 特性:master 分支只用作发布,devlop 用于开发
2.2 单人基础流程
# 1. master 拉取最新代码
git checkout master
git pull
# 2. 新版本开发,基于 master 拉 devlop 分支
git checkout -b devlop
# 3. 开发
...
# 4. 提交代码
git add .
git commmit -m "update"
git push
# 5. 合并代码
git rebase master
git checkout master
git merge devlop
2.3 多人基础流程
# 1. master 拉取最新代码
git checkout master
git pull
# 2. 新版本开发,同学A、B 基于 master 拉 devlop 分支
git checkout -b devlop
# 同学 A 开发
git checkout devlop
...
# 同学A提交代码
git add .
git commmit -m "update"
git push
# 同学 B 开发
git checkout devlop
...
# 同学 B 提交代码
git add .
git commmit -m "update"
git push
# 5. 合并代码
git rebase master
git checkout master
git merge devlop
4.标准 gitflow
4.1 gitflow 流程&基础教程
https://nvie.com/posts/a-successful-git-branching-model/
https://backlog.com/git-tutorial/cn/stepup/stepup2_8.html
4.2 分支规范
分支名 | 性质 | 说明 | 操作对象 |
master | 永久 | - 要保持与线上内容的强一致性,即任何变化都要触发线上部署 - 只接受 | junjie |
develop | 永久 | - 保存当前最新开发成果的分支 - 只接受 feature 的 PR,只能合并到 release - release 和 master 有变动时要及时 rebase 同步变化 | 所有开发同学 |
release-xxx | 临时/永久 | - 测试验收、灰度用的分支,必须保证功能完整性与一定的稳定性
- 只能从 develop 切,-只能合并到 master -
| junjie |
feature-xxx | 临时 | - 提测前开发功能用的分支,理论上一个功能对应一个分支 - 只能从 develop 切,只能合并到 develop | 所有开发同学 |
| 临时 |
|
|
git checkout -b release-2023.3.p.5.18
# edit package.json, etc.
git commit -a -m "fix: bump release version to 2023.4.0"
git tag v2023.518.0
git push origin release-2023.3.p.5.18
git push --tag
# optionally trigger version publish immediately
git commit --allow-empty -m "fix: release version trigger"
git push origin release-2023.3.p.5.18