知识领域
产品与体验
工程与交付
AI 能力

版本协作术语

版本协作

12 个条目

GitGit

协作交付

改完代码我保存了,为什么队友还看不到?我的改动到底被 Git 放在哪了?

Source Control1 处未提交
工作区

src/theme.tsM · 未进暂存

暂存区

空 · 下次提交还没有候选

历史

9f2a1c登录失败显示错误提示

结论:编辑器保存只写工作区。要进历史,得先 add 再 commit,才会多出一枚带 SHA 的快照。

仓库Repository

本地仓库和 GitHub 上的仓库是同一份吗?为什么有时 push 会被拒?

本机文件夹local/main
  • b8e · retry upload
  • c2f · add upload state
  • a1c · init
ahead 2
origin · GitHuborigin/main
  • d49 · teammate bump
  • a1c · init
behind 1 · 受保护

结论:已分叉。下一步先 fetch 看清两边,merge 后再 push;直接强推会盖掉队友。

提交Commit

协作交付

senior 让我把这一坨改动拆开,每个 commit 只干一件事——为什么不能一把梭?

9d2e8a4parent 8d1a2c0可独立 revert
修复登录失败后清空密码
  • src/auth/login.ts
  • tests/auth/login.spec.ts
  • docs/auth/login.md

3 文件 · 同一意图

结论:提交是带 hash/parent 的快照,不是 diff 袋子。只有一个意图,才能独立 revert。

手头改到一半要去修线上,又不能提交,改动该临时放哪?

工作区干净 · 可切分支

login.tsx 已不在这里

搁置架

stash@{0}登录页未完成的错误态login.tsx · form.css

结论:stash 是临时搁置栈,不进历史、不在远程。切走救急用,不是 checkpoint。

分支Branch

协作交付

「同事说 main 受保护、要我开 feature 分支再动手——分支到底是个什么东西?切过去文件怎么就变了?」

Branch指针,不是副本
c1
HEAD→mainc2
devc3

对照:main 与 dev 只是贴在不同提交上的名字git switch dev 把 HEAD 挪到 c3,不复制文件——工作区被换成 c3 那份快照。

差异Diff

协作交付

PR 里红红绿绿一大片,我到底该看哪几行?diff 能告诉我改对了吗?

src/auth/login.ts@@ -10,3 +10,4 @@
  const result = api.login(email, password);+  result.catch(() => clearPassword());  return result;

结论:+ / − 标出哪几行变了。「为什么变、变得对不对」要另查测试和评审。

合并Merge

协作交付

把功能分支合进 main,有时只是指针动一下,有时却多出一个提交,差别在哪?

git log --graph两个父节点

e5f29a4Merge feature/login-error into mainparents:d4c81a5 · b7c2091

结论:两边都动过,就新建一枚带两个父节点的提交,把分叉接回一条线。

变基Rebase

我的功能分支落后 main 了,rebase 一下就能干净跟上——可为什么有人说不安全?

git rebase origin/main落后 1

mainM1M2

featureAB

a1f3022 · b2e7d51还挂在旧 M1

结论:A/B 还接在旧基底上。rebase 是把这两节车厢摘下来,逐个接到新的 M2 后面,哈希会变。

冲突Conflict

协作交付

Git 说有冲突,文件里冒出 <<<<<<< ======= >>>>>>>,我随便点一下保留一边行不行?

src/auth/login.tsboth modified
<<<<<<< HEADif (failed) { retry(); }=======if (failed) { clearPassword(); }>>>>>>> feature

结论:标记还在文件里。Git 不替你猜,删干净并留下双方意图才能继续合并。

拉取请求Pull Request

协作交付

PR 只写了一句「改完了」,看不到 CI 状态,也不知道谁能批准、什么时候能合。

Pull requestOpen
#184 登录失败时清空密码

feature/login-errormain

  • Checks · 运行中
  • Reviewers · 0
Merge 禁用

结论:PR 是一道门,不是直接 push。CI 没绿、没人批准,Merge 就按不下去。

代码评审Code Review

协作交付

每处 diff 都还没给结论,拦截也没修复,就点了批准合并。

server/projects.ts · L42拦截
+ const sql = `SELECT * WHERE owner='${uid}'`;

必须改未登录就能把 uid 拼进 SQL。参数化 + req.user.id。

结论:评审意见钉在这一行上。拦截没修,就不能批准合并。

打个版本标签就行了吧?为什么有人说已经发布的 tag 不能改?

annotated tag已发布

v1.2.0

e3f4g5h修复登录失败清空密码

9d2e8a4main 已前移

结论:tag 钉在打标那一刻的提交上。main 往前走,封印不动。