Git 版本控制 · 文件上传 · 阿里云 OSS · 重点总结
一、Git 概述
1.1 版本控制
| 项目 |
说明 |
| 定义 |
对文件的修改历史进行记录和管理,方便随时恢复、对比版本 |
| 分类 |
集中式(SVN/CVS/VSS)、分布式(Git) |
1.2 Git 核心功能
| 功能 |
说明 |
| 代码回溯 |
记录每次提交日志,方便回退到历史版本 |
| 版本切换 |
一个项目可有多个分支,自由切换 |
| 多人协作 |
团队共同开发,每人负责一部分代码 |
| 远程备份 |
通过远程仓库管理文件,本地丢失可从远程恢复 |
1.3 仓库类型
| 仓库 |
位置 |
说明 |
| 本地仓库 |
开发人员自己电脑 |
编辑、提交代码 |
| 远程仓库 |
远程服务器 |
团队共享,实现协作 |
1.4 三大核心操作
| 操作 |
命令 |
说明 |
| commit |
git commit -m "描述" |
将本地文件和版本信息保存到本地仓库 |
| push |
git push origin 分支名 |
将本地仓库推送到远程仓库 |
| pull |
git pull origin 分支名 |
将远程仓库拉取到本地仓库 |
二、Git 代码托管服务
2.1 常用代码托管平台
| 平台 |
网址 |
特点 |
| GitHub |
github.com |
全球最大开源平台 |
| Gitee(码云) |
gitee.com |
国内首选,速度快 |
| GitLab |
about.gitlab.com |
开源,可自建私有平台 |
| BitBucket |
bitbucket.org |
收费/免费账户 |
2.2 创建远程仓库流程(以 Gitee 为例)
| 步骤 |
操作 |
| ① 注册账号 |
gitee.com/signup |
| ② 登录 |
gitee.com/login |
| ③ 创建仓库 |
仓库名称必填;选择开源/私有 |
| ④ 邀请成员 |
仓库管理 → 仓库成员管理(被邀请人必须为 Gitee 注册用户) |
开源 vs 私有:开源所有人可见;私有只有仓库成员可见。
三、Git 全局配置
3.1 首次使用必做配置
| 命令 |
说明 |
git config --global user.name "用户名" |
设置全局用户名 |
git config --global user.email "邮箱" |
设置全局邮箱 |
git config --list |
查看所有配置信息 |
1 2 3
| git config --global user.name "itxg" git config --global user.email "hello@itxg.cn" git config --list
|
⚠️ 必须先配置:每次提交都会使用该用户信息记录到日志。
四、Git 工作区域(⭐ 核心概念)
4.1 三大区域
| 区域 |
位置 |
说明 |
| 工作区 |
包含 .git 文件夹的目录 |
存放开发的代码(我们写代码的地方) |
| 暂存区 |
.git/index 文件 |
临时保存修改的文件,等待提交 |
| 版本库 |
.git 隐藏文件夹 |
永久保存配置、日志、版本信息 |
4.2 文件状态流转
| 状态 |
说明 |
| untracked(未跟踪) |
新文件还未被 Git 管理 |
| tracked(已跟踪) |
已被 Git 管理,分三种子状态 |
| └ Unmodified |
未修改 |
| └ Modified |
已修改但未暂存 |
| └ Staged |
已加入暂存区 |
1
| 工作区文件 ──[ git add ]──> 暂存区 ──[ git commit ]──> 本地版本库 ──[ git push ]──> 远程仓库
|
五、Git 本地仓库命令(⭐ 重点)
5.1 命令速查表
| 命令 |
作用 |
git init |
在当前目录初始化一个本地仓库 |
git status |
查看文件状态 |
git add 文件名 |
将文件加入暂存区(git add . 全部加入) |
git reset 文件名 |
取消暂存 |
git reset --hard 版本号 |
切换到指定版本(回退) |
git commit -m "描述" |
将暂存区文件提交到版本库 |
git log |
查看提交日志 |
5.2 标准开发流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| git init
git status
git add .
git commit -m "新增登录功能"
git log
git reset --hard 8a5d9c1b
|
六、Git 远程仓库命令(⭐ 重点)
6.1 命令速查表
| 命令 |
作用 |
git remote |
查看远程仓库(默认简称 origin) |
git remote -v |
查看远程仓库详细信息 |
git remote add 简称 远程仓库地址 |
添加远程仓库 |
git clone 远程仓库地址 |
克隆远程仓库到本地 |
git push 简称 分支名 |
推送本地到远程 |
git pull 简称 分支名 |
拉取远程到本地(自动合并) |
6.2 首次推送完整流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
git init
git add . git commit -m "首次提交"
git remote add origin https://gitee.com/xxx/repo.git
git push -u origin master
|
注意事项:
- 密码输入错误 → 在 Windows 凭据管理器中删除后重新输入
- 本地仓库非克隆而来,首次拉取报
refusing to merge unrelated histories → 加 --allow-unrelated-histories 参数
七、Git 分支操作(⭐ 重点)
7.1 分支命令速查
| 命令 |
作用 |
git branch |
列出本地所有分支 |
git branch -r |
列出远程所有分支 |
git branch -a |
列出所有分支(本地+远程) |
git branch 分支名 |
创建新分支 |
git checkout 分支名 |
切换分支 |
git checkout -b 分支名 |
创建并切换到新分支 |
git push 简称 分支名 |
将分支推送到远程 |
git merge 分支名 |
将指定分支合并到当前分支 |
git branch -d 分支名 |
删除分支 |
7.2 分支操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
git branch git branch -a
git branch dev git checkout dev
git checkout -b dev
git push origin dev
git checkout master git merge dev
git branch -d dev
|
⚠️ 合并方向要看清楚:在哪个分支执行 git merge X,就是把 X 合并到当前分支。
八、Git 标签操作
8.1 标签命令速查
| 命令 |
作用 |
git tag |
查看所有标签 |
git tag 标签名 |
创建标签(在当前提交点) |
git push 简称 标签名 |
推送标签到远程 |
git checkout -b 分支名 标签名 |
检出标签(创建一个分支指向标签) |
1 2 3 4 5 6
| git tag v1.0 git push origin v1.0
git checkout -b release-v1.0 v1.0
|
使用场景:标记发布版本(v1.0、v1.2 等)。
九、解决冲突
| 项目 |
说明 |
| 产生原因 |
多人同时修改同一个文件的同一处代码,再 push/pull 时产生冲突 |
| 解决方法 |
手动打开冲突文件,删除 <<<<<、=====、>>>>> 标记,保留正确代码后重新 add + commit + push |
十、.gitignore 忽略文件
10.1 作用
指定 Git 不需要管理的文件(如编译产物、IDE 配置、日志),不会被提交到仓库。
10.2 标准 .gitignore 内容(Java 项目)
1 2 3 4 5 6 7 8 9 10 11 12 13
| .git logs target/ *.class
### IntelliJ IDEA ### .idea *.iws *.iml *.ipr
### macOS ### .DS_Store
|
| 注意事项 |
说明 |
| 文件名固定 |
必须叫 .gitignore,不能改名 |
| 通配符 |
*.class 忽略所有 .class 文件;target/ 忽略 target 目录 |
| 创建时机 |
推荐新建仓库时就创建(Gitee 创建仓库时可勾选生成) |
十一、IDEA 中使用 Git
11.1 配置 Git
IDEA 集成的 Git 本质还是调用本地安装的 git.exe,需要先安装 Git。
| 配置 |
路径 |
| Settings → Version Control → Git |
指定 git.exe 路径(默认 C:\Program Files\Git) |
11.2 IDEA 操作 = 命令行命令对照表
| IDEA 操作 |
等价命令 |
| VCS → Import into Version Control → Create Git Repository |
git init |
| Get from Version Control |
git clone |
| 右键 → Git → Add |
git add |
| 右键 → Git → Commit File |
git commit |
| 工具栏 ✓ Commit and Push |
git commit + git push |
| 工具栏 ↓ Update Project |
git pull |
| 状态栏 master → Git Branches |
git branch 系列 |
| Branches → New Branch |
git branch 名 |
| Branches → Checkout |
git checkout |
| Branches → Merge into Current |
git merge |
常用快捷按钮:IDEA 顶部工具栏的 ✓(提交+推送)、↓(拉取)按钮覆盖 90% 日常操作。
十二、文件上传(前后端实现)
12.1 概念
浏览器把文件传到服务器,服务器保存到本地或云端。
12.2 前端三要素(⭐ 必备)
| 要素 |
要求 |
| ① 请求方式 |
必须是 POST 或 PUT(GET 不行) |
| ② 表单 enctype |
multipart/form-data |
| ③ 表单项 |
必须有 <input type="file"> 文件上传组件 |
1 2 3 4 5 6 7
| <form action="/upload" method="POST" enctype="multipart/form-data"> 用户名:<input type="text" name="username"> 年龄:<input type="text" name="age"> 头像:<input type="file" name="image"> <input type="submit" value="提交"> </form>
|
12.3 后端 Controller 三要素
| 要素 |
要求 |
| ① 形参类型 |
必须是 MultipartFile |
| ② 形参名 |
必须与前端表单 name 属性一致(或加 @RequestParam) |
| ③ 引入依赖 |
spring-boot-starter-web(已包含 MultipartFile 支持) |
12.4 MultipartFile 常用 API
| 方法 |
作用 |
getOriginalFilename() |
获取原始文件名(如 照片.jpg) |
getInputStream() |
获取文件输入流(用于读取/写入文件) |
getSize() |
获取文件大小(字节) |
getContentType() |
获取文件 MIME 类型 |
transferTo(File dest) |
直接保存到指定路径 |
12.5 本地保存文件完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @RestController public class UploadController {
@PostMapping("/upload") public Result upload(String username, Integer age, MultipartFile image) throws IOException {
String originalFilename = image.getOriginalFilename();
String extension = originalFilename.substring(originalFilename.lastIndexOf(".")); String newFileName = UUID.randomUUID().toString() + extension;
image.transferTo(new File("D:/uploads/" + newFileName));
return Result.success(); } }
|
12.6 配置文件大小限制
1 2 3 4 5 6
| spring: servlet: multipart: max-file-size: 10MB max-request-size: 100MB
|
十三、阿里云 OSS(对象存储服务)
13.1 概念
| 项目 |
说明 |
| OSS |
Object Storage Service,阿里云提供的有偿对象存储服务 |
| 使用场景 |
用户头像、商品图片、视频等静态资源不存数据库,直接上传到 OSS |
| 优势 |
高可用、可靠、无需自己搭建服务器 |
13.2 使用步骤
| 步骤 |
操作 |
| ① 开通服务 |
阿里云官网搜索 “OSS 对象存储” 并开通 |
| ② 创建 Bucket |
控制台 → OSS → 创建 Bucket(存储空间) |
| ③ 获取 AccessKey |
创建 AccessKeyId 和 AccessKeySecret |
| ④ 引入 SDK |
pom 引入 aliyun-sdk-oss 依赖 |
| ⑤ 配置参数 |
application.yml 配置 endpoint、密钥、bucket 名 |
| ⑥ 编写工具类 |
创建 OSSClient → 调用 putObject 上传 |
13.3 引入 SDK
1 2 3 4 5
| <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency>
|
13.4 配置文件
1 2 3 4 5 6 7
| aliyun: oss: endpoint: https://oss-cn-shanghai.aliyuncs.com accessKeyId: 你的AccessKeyId accessKeySecret: 你的AccessKeySecret bucketName: web-framework01
|
1 2 3 4 5 6 7 8 9 10
| @Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class AliOSSProperties { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; }
|
13.5 OSS 上传工具类完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| @Component public class AliOSSUtils {
@Autowired private AliOSSProperties props;
public String upload(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream();
String originalFilename = file.getOriginalFilename(); String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
OSS ossClient = new OSSClientBuilder().build( props.getEndpoint(), props.getAccessKeyId(), props.getAccessKeySecret());
ossClient.putObject(props.getBucketName(), fileName, inputStream);
String url = props.getEndpoint().split("//")[0] + "//" + props.getBucketName() + "." + props.getEndpoint().split("//")[1] + "/" + fileName;
ossClient.shutdown(); return url; } }
|
13.6 Controller 调用
1 2 3 4 5 6 7 8 9 10 11 12 13
| @RestController public class UploadController {
@Autowired private AliOSSUtils aliOSSUtils;
@PostMapping("/upload") public Result upload(MultipartFile image) throws IOException { String url = aliOSSUtils.upload(image); return Result.success(url); } }
|
十四、综合速查
Git 命令一表流
1 2 3 4 5 6
| 配置: git config --global user.name/email 本地仓库: git init / git status / git add / git commit / git log 远程仓库: git remote add / git clone / git push / git pull 分支: git branch / git checkout / git merge / git push origin 分支 标签: git tag / git push origin 标签 撤销: git reset 文件名(取消暂存)/ git reset --hard 版本号(回退)
|
工作区域口诀
1 2 3
| 工作区 → git add → 暂存区 → git commit → 本地版本库 本地版本库 → git push → 远程仓库 远程仓库 → git pull → 本地版本库(自动合并到工作区)
|
文件上传 6 字诀
1 2
| 前端:post + multipart/form-data + <input type="file"> 后端:MultipartFile 形参 + 名称一致 + transferTo/getInputStream
|
阿里云 OSS 使用流程
1 2 3
| 开通服务 → 创建 Bucket → 获取 AccessKey ↓ 引入 SDK → 配置参数 → 注入工具类 → 调用 upload(file) → 返回 URL
|
IDEA 三大快捷按钮(必学)
1 2 3
| ✓ Commit and Push → 提交并推送(最常用) ↓ Update Project → 拉取最新代码 master ▼ → 分支管理(创建/切换/合并)
|