07-Git 版本控制
对应原始资料:
day09-git
一、为什么需要版本控制
- 代码历史可追溯、可回滚。
- 多人协作,分支并行开发。
- 远程备份(GitHub / GitLab / Gitee)。
SVN 是集中式,Git 是分布式——每个开发者本地都有完整仓库。
二、Git 核心概念
工作区(Working Directory)
↓ git add
暂存区(Stage / Index)
↓ git commit
本地仓库(Repository)
↓ git push
远程仓库(Remote)三、配置
bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --list # 查看配置四、本地操作
1. 初始化与克隆
bash
git init # 把目录变成 git 仓库
git clone https://github.com/x/y.git # 克隆远程仓库2. 基本流程
bash
git status # 查看状态
git add . # 添加所有改动到暂存区
git add file.txt # 添加单个文件
git commit -m "提交说明" # 提交到本地仓库
git log --oneline # 查看简洁日志
git log --graph # 图形化日志3. 版本回退
bash
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard <commitId> # 回退到指定版本
git reflog # 查看所有操作(包括回退前的)4. 撤销修改
bash
git checkout -- file # 丢弃工作区改动(未 add 前)
git reset HEAD file # 撤销暂存(已 add 未 commit)
# 已 commit 的用 reset五、分支管理
bash
git branch # 查看分支
git branch dev # 创建 dev 分支
git checkout dev # 切换到 dev
git checkout -b dev # 创建并切换
git switch dev # 新语法切换
git merge dev # 把 dev 合并到当前分支
git branch -d dev # 删除分支(-D 强删)
git branch -a # 查看所有分支(含远程)分支策略(团队协作)
master/main:生产分支。develop:开发主分支。feature/xxx:功能分支。hotfix/xxx:紧急修复。release/xxx:发布分支。
六、远程协作
bash
git remote -v # 查看远程
git remote add origin https://... # 添加远程
git push origin master # 推送
git push -u origin master # 第一次推送并关联
git pull origin master # 拉取并合并
git fetch origin # 拉取但不合并七、冲突解决
多人修改同一文件合并时可能冲突:
git pull提示冲突。- 打开文件,找到
<<<<<<<=======>>>>>>>标记,手动选择保留内容。 - 删除标记,保存。
git add+git commit。
八、SSH 免密
bash
ssh-keygen -t rsa -C "email"
# 把 ~/.ssh/id_rsa.pub 公钥配置到 GitHub / GitLab九、IDEA 集成
- 右下角分支切换。
- 提交:
Ctrl + K,推送:Ctrl + Shift + K。 - 解决冲突图形化界面。
十、常用工作流
1. 个人项目
本地修改 → git add → git commit → git push2. 团队协作(Pull Request)
1. fork 项目(或克隆团队仓库)
2. 新建 feature 分支
3. 开发并提交
4. push 到自己仓库
5. 发起 Pull Request
6. Code Review 后合并到主分支十一、.gitignore
忽略不需要版本控制的文件(IDE 配置、target、日志等):
.idea/
target/
*.log
*.class
.DS_Store十二、与 Maven / SVN 对比
| Git | SVN |
|---|---|
| 分布式 | 集中式 |
| 离线可提交 | 必须联网 |
| 分支轻量 | 分支是目录拷贝 |
| 主流 | 逐渐减少 |
练习建议
- 在 Gitee 注册账号,新建一个仓库,克隆到本地。
- 模拟多人:创建 dev 分支开发,合并到 master。
- 故意制造冲突并解决。
- 把之前的 JavaSE/JavaWeb 项目用 Git 管理,推送到远程。