Git 与 GitHub
版本控制与协作。
Git 与 GitHub
这一课你将能做到
- 完成 Git 本地核心操作:init、add、commit、branch、merge、rebase、回滚
- 把本地仓库推到 GitHub,配置 SSH 免密,走通 feature 分支 + Pull Request 协作流
- 写出规范的 commit message,并能用
git log、git reflog自救任何误操作
为什么要学
没有版本控制的开发是什么样?改坏了代码想退回昨天的版本——没有了;多人同时改一个文件——互相覆盖;线上出了 bug 想对比「上一版到底改了什么」——靠记忆。Git 就是代码的时间机器,每一次 commit 都是一个可以随时穿越回去的快照。
而 GitHub 在这个时间机器之上加了「协作层」:代码托管、Pull Request 评审、Issue 管理、Actions 自动化。对 DevOps 来说更重要的是:所有自动化的触发点都是 Git 事件——push 触发构建、merge 触发部署。Git 玩不转,后面的 CI/CD 就是空中楼阁。
先建立图像
Git 的四个区域,代码在它们之间流动:
工作区 暂存区 本地仓库 远程仓库
(你改代码) → (git add) → (git commit) → (git push)
↑ │
└──────── git pull / git fetch ←──────┘
回退方向:
git restore 文件 工作区 ← 暂存区(丢弃本地修改)
git restore --staged 暂存区 ← 本地仓库(取消暂存)
git reset --soft HEAD~1 本地仓库回退一个 commit(改动回暂存区)
分支模型(推荐初学者的 trunk-based 简化版):
main ────●────────●────────●──────▶ 永远可发布
\ / \
feature ●────● ●──● 短命分支,几天内合回
↑
Pull Request 评审 + CI 通过才允许合并
跟着做
步骤 1:从零建立本地仓库
# 进入你的 Spring Boot 项目
cd myapp
git init
git config user.name "Your Name"
git config user.email "you@example.com"
# .gitignore 是 Java 项目的门面,必须先建
cat > .gitignore << 'EOF'
target/
*.class
*.jar
!.mvn/wrapper/maven-wrapper.jar
.idea/
*.iml
.vscode/
application-local.yml
*.log
EOF
git add .
git commit -m "chore: initial commit with gitignore"
步骤 2:日常修改循环
# 改了两个文件后
git status # 永远先看状态,知道哪些文件变了
git diff # 看具体改了什么(未暂存的)
git add src/main/java/com/example/UserController.java
git commit -m "feat(user): 添加用户查询接口"
# 提交错了想改最后一条 commit 的说明
git commit --amend -m "feat(user): 添加用户分页查询接口"
步骤 3:分支操作——功能开发的标准姿势
# 从 main 切出功能分支
git checkout -b feature/user-cache
# 在分支上随便折腾、提交
git commit -am "feat(user): 接入 Redis 缓存"
git commit -am "test(user): 补充缓存命中测试"
# 合回 main(推荐 rebase 保持历史线性)
git checkout main
git pull origin main # 先同步远程最新
git checkout feature/user-cache
git rebase main # 把我的提交「搬」到 main 最新之后
git checkout main
git merge feature/user-cache # 快进合并,无多余 merge commit
git branch -d feature/user-cache