Git 操作速查手册 (DevOps / 个人开发版)¶
0. 全局配置 (一次性设置)¶
目的:从根源上杜绝 git pull 自动产生 "Merge branch" 的情况。
Bash
# 设置拉取时默认使用变基 (Rebase),保持历史线性
git config --global pull.rebase true
# (可选) 设置 fetch 时自动修剪远程已删除的分支
git config --global fetch.prune true
1. 日常开发流程¶
核心原则:本地可以随便乱写(commit "test", "fix"),但在推送到远程之前,必须整理成一个干净的提交。
A. 开始工作¶
Bash
# 确保当前分支是最新的
git checkout main
git pull
# 建议新建分支开发 (养成好习惯)
git checkout -b feature/新功能名称
B. 本地提交 (存档)¶
在本地开发时,不需要追求完美,随时保存进度。
Bash
git add .
git commit -m "临时保存: 正在调试xxx"
# 再次修改后...
git commit -m "fix: 修复报错"
2. 提交前的“清洗” (Squash)¶
场景:本地有 10 个琐碎的 test 提交,准备 Push 前,将它们合并为 1 个正式提交。
⚠️ 常见误区:直接 Push 琐碎记录,导致远程历史脏乱差。
操作步骤¶
-
软重置 (最快方法):
将指针回退到这波修改之前的状态,但保留文件修改。
Bash
# HEAD~N 代表回退最近 N 次提交 git reset --soft HEAD~5 # 或者找到乱改之前的 commit hash # git reset --soft a1b2c3d -
重新提交:
此时
git status会显示所有修改都在暂存区(绿色)。Bash
git commit -m "feat: 完成了XXX模块适配"
3. 同步上游代码 (针对 Fork 仓库)¶
场景:原作者 (Upstream) 更新了代码,你需要同步,但不想产生分叉。
⚠️ 常见误区:在 VS Code 点击“同步”按钮,或直接 git pull (在未配置 rebase 时),导致产生 Merge branch 'main' of... 提交。
标准操作 (Rebase 模式)¶
-
拉取上游更新:
Bash
git fetch upstream -
变基 (Rebase):
将你的修改“拔下来”,等上游更新插进去后,再把你的修改“盖上去”。
Bash
git rebase upstream/main- 若有冲突:解决冲突 ->
git add .->git rebase --continue
- 若有冲突:解决冲突 ->
4. 推送到远程¶
场景:将本地代码同步到你的 GitHub 仓库。
常规推送¶
如果是新分支,或只是增加了新提交(没修改历史):
Bash
git push
强制推送 (Force Push)¶
场景:你执行过 reset (清洗历史) 或 rebase (变基) 操作后,本地历史与远程不一致。
Bash
# ⚠️ 警告:仅在确定只有你一个人使用该分支时使用
git push -f
5. 常见误操作与急救¶
🛑 误操作 1:VS Code 自动同步导致 Merge¶
-
现象:点了 VS Code 左下角那个循环箭头,结果多了一个 "Merge branch" 提交。
-
原因:VS Code 默认行为是
git pull --merge。 -
修正:
-
git reset --soft HEAD~1(撤销那个合并提交,保留代码)。 -
改为在终端执行
git pull --rebase。
-
🛑 误操作 2:Force Push 覆盖了同事的代码¶
-
现象:多人协作分支,你
push -f后同事代码没了。 -
原则:绝对禁止对公共分支(如公司项目的
dev、main)进行git push -f。 -
修正:查看
git reflog找回之前的提交,或者在群里道歉并手动找回代码。
🛑 误操作 3:改乱了想重来¶
-
场景:Rebase 失败,或者代码改得一团糟,想回到上游最新状态(放弃本地修改)。
-
修正:
Bash
git fetch upstream # 警告:这会丢弃所有本地未提交的修改 git reset --hard upstream/main
6. 极简速查表 (Cheat Sheet)¶
| 目的 | 命令 | 备注 |
|---|---|---|
| 同步上游 | git pull --rebase upstream main |
禁止使用普通的 git merge |
| 整理提交 | git reset --soft HEAD~N |
将最近 N 次提交合并为 1 次 |
| 强制覆盖 | git push -f |
修改历史后必须使用 |
| 后悔药 | git reflog |
查看所有操作记录,找回丢失的 commit |
| 放弃修改 | git checkout . |
丢弃工作区所有未提交的改动 |
| 将本地修改上浮 git reset --soft upstream/main |