GitGit
改完代码我保存了,为什么队友还看不到?我的改动到底被 Git 放在哪了?
src/theme.tsM · 未进暂存
空 · 下次提交还没有候选
9f2a1c登录失败显示错误提示
结论:编辑器保存只写工作区。要进历史,得先 add 再 commit,才会多出一枚带 SHA 的快照。
改完代码我保存了,为什么队友还看不到?我的改动到底被 Git 放在哪了?
src/theme.tsM · 未进暂存
空 · 下次提交还没有候选
9f2a1c登录失败显示错误提示
结论:编辑器保存只写工作区。要进历史,得先 add 再 commit,才会多出一枚带 SHA 的快照。
本地仓库和 GitHub 上的仓库是同一份吗?为什么有时 push 会被拒?
结论:已分叉。下一步先 fetch 看清两边,merge 后再 push;直接强推会盖掉队友。
senior 让我把这一坨改动拆开,每个 commit 只干一件事——为什么不能一把梭?
9d2e8a4parent 8d1a2c0可独立 revert3 文件 · 同一意图
结论:提交是带 hash/parent 的快照,不是 diff 袋子。只有一个意图,才能独立 revert。
手头改到一半要去修线上,又不能提交,改动该临时放哪?
login.tsx 已不在这里
stash@{0}登录页未完成的错误态login.tsx · form.css
结论:stash 是临时搁置栈,不进历史、不在远程。切走救急用,不是 checkpoint。
「同事说 main 受保护、要我开 feature 分支再动手——分支到底是个什么东西?切过去文件怎么就变了?」
c1c2c3对照:main 与 dev 只是贴在不同提交上的名字;git switch dev 把 HEAD 挪到 c3,不复制文件——工作区被换成 c3 那份快照。
PR 里红红绿绿一大片,我到底该看哪几行?diff 能告诉我改对了吗?
const result = api.login(email, password);+ result.catch(() => clearPassword()); return result;结论:+ / − 标出哪几行变了。「为什么变、变得对不对」要另查测试和评审。
把功能分支合进 main,有时只是指针动一下,有时却多出一个提交,差别在哪?
e5f29a4Merge feature/login-error into mainparents:d4c81a5 · b7c2091
结论:两边都动过,就新建一枚带两个父节点的提交,把分叉接回一条线。
我的功能分支落后 main 了,rebase 一下就能干净跟上——可为什么有人说不安全?
mainM1M2
featureAB
a1f3022 · b2e7d51还挂在旧 M1
结论:A/B 还接在旧基底上。rebase 是把这两节车厢摘下来,逐个接到新的 M2 后面,哈希会变。
Git 说有冲突,文件里冒出 <<<<<<< ======= >>>>>>>,我随便点一下保留一边行不行?
<<<<<<< HEADif (failed) { retry(); }=======if (failed) { clearPassword(); }>>>>>>> feature
结论:标记还在文件里。Git 不替你猜,删干净并留下双方意图才能继续合并。
PR 只写了一句「改完了」,看不到 CI 状态,也不知道谁能批准、什么时候能合。
feature/login-error→main
结论:PR 是一道门,不是直接 push。CI 没绿、没人批准,Merge 就按不下去。
每处 diff 都还没给结论,拦截也没修复,就点了批准合并。
+ const sql = `SELECT * WHERE owner='${uid}'`;必须改未登录就能把 uid 拼进 SQL。参数化 + req.user.id。
结论:评审意见钉在这一行上。拦截没修,就不能批准合并。
打个版本标签就行了吧?为什么有人说已经发布的 tag 不能改?
v1.2.0
e3f4g5h修复登录失败清空密码
9d2e8a4main 已前移
结论:tag 钉在打标那一刻的提交上。main 往前走,封印不动。