Skip to content
Git 进阶:那些我早该知道的用法
说来惭愧,用了两年 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.jsrebase vs merge
以前只用 merge,分支图看着像蜘蛛网。
现在用 rebase 保持线性历史:
bash
git checkout feature
git rebase main需要注意:已经 push 到远程的分支不要 rebase,会给协作者带来麻烦。个人分支随便用。
最实用的一个习惯
给 commit message 加上类型前缀:
feat: 添加用户登录功能
fix: 修复分页组件边界问题
docs: 更新 README
refactor: 重构数据处理逻辑几个月后回头看代码历史,一目了然。
