Skip to content

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                           # 拉取但不合并

七、冲突解决

多人修改同一文件合并时可能冲突:

  1. git pull 提示冲突。
  2. 打开文件,找到 <<<<<<< ======= >>>>>>> 标记,手动选择保留内容。
  3. 删除标记,保存。
  4. 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 push

2. 团队协作(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 对比

GitSVN
分布式集中式
离线可提交必须联网
分支轻量分支是目录拷贝
主流逐渐减少

练习建议

  1. 在 Gitee 注册账号,新建一个仓库,克隆到本地。
  2. 模拟多人:创建 dev 分支开发,合并到 master。
  3. 故意制造冲突并解决。
  4. 把之前的 JavaSE/JavaWeb 项目用 Git 管理,推送到远程。