Git 工作流与常用操作:一个人也要有的秩序感
一个人写项目也值得有分支秩序:主干永远可部署,改动在分支上完成。出了问题能一键回滚,这本身就是安全感的来源。
一、最简单的分支策略
个人项目不需要 GitFlow。三条规则就够:
main永远可用(可部署状态);- 新改动开分支:
feature/xxx、fix/xxx; - 完成后合并回
main并删除分支。
git switch -c feature/add-archive-page
# 改代码
git add -A && git commit -m "feat: 新增归档页"
git push -u origin feature/add-archive-page
# 完成后(本地合并,保证 main 是线性的)
git switch main && git pull
git merge --no-ff feature/add-archive-page
git push
git branch -d feature/add-archive-page二、提交信息写清楚
用 Conventional Commits 的前缀,一眼看出这次改了什么性质:
| 前缀 | 用途 |
|---|---|
| feat | 新功能 |
| fix | 修 bug |
| docs | 只改文档 |
| style | 格式调整(不影响逻辑) |
| refactor | 重构 |
| perf | 性能优化 |
| chore | 构建/依赖/杂项 |
git commit -m "fix: 修正归档页按年份分组的边界问题"
git commit -m "docs: 补充 DNSSEC 配置步骤"写「为什么」而不是「改了什么」——后者看 diff 就知道。
三、撤销:四种场景对应四条命令
这是最高频也最容易搞混的部分:
| 场景 | 命令 | 说明 |
|---|---|---|
| 改了文件,还没 add | git restore <file> | 丢弃工作区改动 |
| 已经 add,还没 commit | git restore --staged <file> | 取消暂存,改动保留 |
| 已经 commit,没 push | git reset --soft HEAD~1 | 撤销 commit,改动回到暂存区 |
| 已经 push 了 | git revert <commit> | 生成一个反向 commit(安全,推荐) |
# 危险但有效的兜底:彻底回到某个提交,丢弃之后所有改动
git reset --hard HEAD~3 # 本地未 push 时才用
# 搞砸了还有后悔药:reflog 能找回「被删掉」的 commit
git reflog
git checkout <hash>
reset --hard只对自己还没推送的本地提交用。已经推给别人看的提交,一律用revert。
四、rebase 还是 merge
简单判断:
- 自己的分支同步主干:用
rebase,历史干净; - 把分支合回主干:用
merge(--no-ff保留合并点,方便回滚); - 已经 push 出去的公共分支:不要 rebase,会改写历史坑队友。
# 分支落后主干时
git switch feature/x
git fetch origin
git rebase origin/main
# 整理本地几个琐碎 commit(未 push 时)
git rebase -i HEAD~3五、日常高频命令
git status -s # 简洁状态
git diff # 未暂存的改动
git diff --staged # 已暂存的改动
git log --oneline --graph -15 # 图形化历史
git show <commit> # 看某次提交改了什么
git blame -L 10,20 file.js # 这行是谁改的
git stash # 临时存起来
git stash pop # 取回来
git stash list
git cherry-pick <commit> # 把某次提交搬到别的分支
git tag -a v1.0 -m "第一个可用版本" && git push --tags六、.gitignore 要早写
node_modules/
dist/
.env
*.log
.DS_Store
.idea/
.vscode/
*.pem私钥、.env 一定不要提交。如果已经提交了,光删文件没用——历史里还在,需要 git filter-repo 清理,并立刻更换密钥。
七、一个能省时间的别名配置
git config --global alias.st "status -s"
git config --global alias.lg "log --oneline --graph --decorate -20"
git config --global alias.unstage "restore --staged"
git config --global alias.last "log -1 --stat"配置完 git lg 就能看到清爽的分支图,非常上瘾。
八、备份即推送
对纯静态站来说,Git 本身就是最好的备份:代码在 GitHub 上有一份,服务器上一份,本地一份。 所以养成的习惯是——改完就 commit + push,哪怕只是改了个错别字。这点比任何分支模型都重要。
