Skip to content

Git 进阶:那些我早该知道的用法

发布时间:2026-03-22 08:00
最后编辑:2026-03-22 08:00
全文大约 0 字(读完需 1 分钟)

说来惭愧,用了两年 Git,会的操作大概就这些:

bash
git add .
git commit -m "update"
git push

直到上周课设出了问题,commit 记录一团糟,想回退找不到对的版本。才意识到该认真学学了。

交互式暂存

以前改了一堆文件,全部 git add . 一股脑提交。

现在用 git add -p,可以按代码块选择性暂存:

bash
git add -p
# 然后对每个代码块选 y/n/s(拆分)

一次修改涉及多个功能时,可以拆成多个语义清晰的 commit。课设答辩的时候,评委看你的 Git 记录会舒服很多。

修改最近的 commit

写错 commit message?忘了加个文件?

bash
# 修改上一条 commit 的 message
git commit --amend -m "新的描述"

# 把漏掉的文件追加到上一条 commit
git add forgotten_file.js
git commit --amend --no-edit

git reset 再重新提交优雅多了。

stash:临时保存工作

写到一半要切分支看别的东西:

bash
git stash           # 暂存当前修改
git checkout other  # 切到别的分支干活
git checkout main   # 切回来
git stash pop       # 恢复之前的修改

以前遇到这种情况我会先随便 commit 一个「wip」,现在知道有更干净的办法了。

查看历史的正确姿势

bash
# 图形化看分支历史
git log --oneline --graph --all

# 搜索某段代码是什么时候加的
git log -S "function_name" --oneline

# 看某个文件的修改历史
git log --follow -p filename.js

rebase vs merge

以前只用 merge,分支图看着像蜘蛛网。

现在用 rebase 保持线性历史:

bash
git checkout feature
git rebase main

需要注意:已经 push 到远程的分支不要 rebase,会给协作者带来麻烦。个人分支随便用。

最实用的一个习惯

给 commit message 加上类型前缀:

feat: 添加用户登录功能
fix: 修复分页组件边界问题
docs: 更新 README
refactor: 重构数据处理逻辑

几个月后回头看代码历史,一目了然。

Built with ❤️ using VitePress v2 & Vue & Vite