五大分支
主分支(main/master)
作用:存放稳定、可随时部署到生产环境的代码。
特点:
- 分支上的每一个提交都对应一个正式的发布版本。
- 不允许直接在此分支上开发。
- 通常会被打上版本标签(如v1.0.0,v1.0.1)
开发分支(develop)锅
作用:存放最新开发成果的集成分支,是功能开发的集线器。
特点:
- 当develop分支上的代码达到稳定状态并准备发布时,会合并到main分支。
- 所有功能分支、发布分支都从develop分支拉取。
功能分支(feature/*)自己的碗
来源:develop
合并到:develop
命名惯例:feature/user-authentication,feature/payment-integration
作用:开发新功能。
生命周期:
- 从develop分支拉取。
- 开发完成后,合并回develop分支。
- 合并后,该功能分支通常被删除。
| |
Bash
发布分支(release/*)
来源:develop
合并到:develop 和 main
命名惯例:release/1.2.0,release/2024-spring
作用:为发布新版本做准备。在此分支上只做Bug修复、生成版本号、整理文档等发布准备工作,不
再添加新功能。
生命周期:
- 当develop分支的功能足够进行一次发布时,从develop拉出release分支。
- 在此分支上进行最后的测试和修复。
- 准备就绪后,将release分支合并到main分支并打上版本标签。
- 同时,还必须合并回develop分支,因为release分支上的修复可能在develop分支上不存在。
热修复分支(hotfix/*)
来源:main
合并到:main 和 develop
命名惯例:hotfix/critical-security-patch,hotfix/1.2.1
作用:快速修复生产环境(main分支)上的紧急Bug。
生命周期:
- 从main分支上出现Bug的提交点(通常是最近的标签)拉取。
- 修复完成后,合并回main分支并打上新的版本标签(如v1.0.1),
- 同时,还必须合并回develop分支,确保修复在后续开发中也生效。
代码回退(重要)
工作区有改动,无add无commit无push
执行rollback

工作区有改动,已add无commit无push
执行reset head



或者执行rollback,相当于hard模式的reset
使用场景:
- 不小心把一个不需要add的文件给add了,此时使用reset。(建议使用Mixed模式:保留工作目录的代码)
工作区有改动,已add已commit无push
操作同 “工作区有改动,已add无commit无push”一样
^代表回退一次commit,^^代表回退两次commit

使用场景:
- 不小心把一个不需要commit的文件给commit了,此时使用reset,HEAR^。(建议使用Mixed模式:保留工作目录的代码)
工作区有改动,已add已commit已push
先选择要撤回的提交记录,然后执行revert commit。(注意:执行revert commit后,当前工作区修改的代码会消失)

再直接执行一次push,将远程仓库提交撤回

Revert vs Reset


Git Stash
git stash是一个极其实用的 Git 命令,可以理解为“临时储藏柜"或“草稿箱"。它用于临时保存你当前工作目录和暂存区的修改,让你能得到一个干净的工作区,以便进行其他操作(如切换分支、拉取代码),之后还可以重新应用这些保存的修改。
应用场景:
- 正在开发一个新功能,代码写了一半
- 突然要紧急修复main分支的一个bug
- 此时如果用git checkout main切换分支的话,Git会阻止你,因为你当前的工作区有未提交的更改。
- 此时就需要使用git stash

CherryPick(了解即可)
- 将某个分支上的特定提交应用到当前分支,而不是合并整个分支
Fetch vs Merge
Fetch
- 从远程仓库下载最新的信息,包括:提交、分支、标签。不会修改本地的工作目录
Merge
- 从远程仓库下载最新的信息,工作目录可能会被修改
Merge vs Rebase
Merge
- 执行Merge后,会创建一个新的合并提交,历史记录中出现分叉
- 适合场景:公共分支的提交(main,dev)
Rebase
- 将当前分支的所有提交放到目标分支最新的提交之后,历史记录是线性的
- 适合场景:私有分支
案例:需要撤回已提交到远程的提交,同时保证本地的工作目录还有撤回提交的内容
方案一:
选中要撤回的提交记录,执行Revert Commit,(执行后,工作目录的这次提交内容会消失)
然后执行push
然后再选中要撤回的提交记录,执行CherryPick(此时工作目录如果有了其他的修改,git则会提示要先将工作目录stash一下)
如果执行了stash,则再执行一下unstash
方案二:
选中要撤回的提交记录,执行Revert Commit,(执行后,工作目录的这次提交内容会消失)
然后执行push
在GIT日志中找到Revert 的那条记录,然后再执行一次Revert,此时本地分支就会回到Revert之前的版本了。