Git 工作流与常用操作:一个人也要有的秩序感

一个人写项目也值得有分支秩序:主干永远可部署,改动在分支上完成。出了问题能一键回滚,这本身就是安全感的来源。

一、最简单的分支策略

个人项目不需要 GitFlow。三条规则就够:

  1. main 永远可用(可部署状态);
  2. 新改动开分支:feature/xxxfix/xxx
  3. 完成后合并回 main 并删除分支。
bash
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构建/依赖/杂项
bash
git commit -m "fix: 修正归档页按年份分组的边界问题"
git commit -m "docs: 补充 DNSSEC 配置步骤"

写「为什么」而不是「改了什么」——后者看 diff 就知道。

三、撤销:四种场景对应四条命令

这是最高频也最容易搞混的部分:

场景命令说明
改了文件,还没 addgit restore <file>丢弃工作区改动
已经 add,还没 commitgit restore --staged <file>取消暂存,改动保留
已经 commit,没 pushgit reset --soft HEAD~1撤销 commit,改动回到暂存区
已经 push 了git revert <commit>生成一个反向 commit(安全,推荐
bash
# 危险但有效的兜底:彻底回到某个提交,丢弃之后所有改动
git reset --hard HEAD~3      # 本地未 push 时才用

# 搞砸了还有后悔药:reflog 能找回「被删掉」的 commit
git reflog
git checkout <hash>

reset --hard 只对自己还没推送的本地提交用。已经推给别人看的提交,一律用 revert

四、rebase 还是 merge

简单判断:

  • 自己的分支同步主干:用 rebase,历史干净;
  • 把分支合回主干:用 merge--no-ff 保留合并点,方便回滚);
  • 已经 push 出去的公共分支:不要 rebase,会改写历史坑队友。
bash
# 分支落后主干时
git switch feature/x
git fetch origin
git rebase origin/main

# 整理本地几个琐碎 commit(未 push 时)
git rebase -i HEAD~3

五、日常高频命令

bash
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 要早写

bash
node_modules/
dist/
.env
*.log
.DS_Store
.idea/
.vscode/
*.pem

私钥、.env 一定不要提交。如果已经提交了,光删文件没用——历史里还在,需要 git filter-repo 清理,并立刻更换密钥。

七、一个能省时间的别名配置

bash
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,哪怕只是改了个错别字。这点比任何分支模型都重要。