Git 版本控制入门到协作

知识库
知识库文档
/tech-stacks/git/tutorial/Git 版本控制入门到协作.md

文档

Git 版本控制入门到协作教程

第一章:Git 的三种状态

工作目录        暂存区          Git 仓库
(Working)  →  (Staging)  →  (Repository)
   ↑              ↑              ↑
  edit        git add        git commit
                ↑
          git reset HEAD

commit 内部结构

每次 commit 是一个完整快照(非差异):

Commit Object → Tree Object → Blob (文件内容)
                           → Tree (子目录)
              → parent Commit

第二章:分支本质

Git 分支是一个指向 commit 的40 字节 SHA-1 指针

main:    refs/heads/main → a1b2c3
feature: refs/heads/feature → d4e5f6

HEAD → refs/heads/feature  (当前在 feature 分支)

这就是为什么:

  • 创建分支几乎瞬间完成(写一个指针文件)
  • 切换分支修改 HEAD 指向
  • git checkout -b = git branch + git checkout

第三章:合并策略对比

Fast-Forward(快进)

main:    A---B
feature:       C---D
合并后:  A---B---C---D  (main 直接移动到 D)

条件:feature 基于 main 最新 commit。

Three-Way Merge

main:    A---B---E
feature:       C---D
合并后:  A---B---E---M  (三方合并节点)

条件:两分支各有提交,不能快进。

Rebase

main:    A---B---E
feature:       C---D
变基后:  A---B---E---C'---D'  (历史线性)

适合个人分支整理,不要 rebase 公共分支

第四章:远程协作

git remote add origin git@github.com:user/repo.git
git push -u origin main
git pull origin main           # = fetch + merge
git fetch origin               # 仅下载不合并

Pull Request (PR) 流程

  1. Fork 或创建 feature 分支
  2. 提交并 push 到远程
  3. 在 GitHub 发起 PR
  4. Code Review → CI 通过 → Merge

第五章:常用场景速查

场景 命令
撤销最后一次 commit(保留改动) git reset --soft HEAD~1
修改最后一次 commit 信息 git commit --amend -m "new msg"
临时保存工作区 git stash / git stash pop
查看某文件谁改过 git blame filename
查找哪个 commit 引入 bug git bisect
cherry-pick 单 commit git cherry-pick <hash>
删除远程 branch git push origin --delete branch

思考题

  1. git mergegit rebase 的根本区别是什么?各自适用场景?
  2. detached HEAD 状态是什么?什么时候会进入这个状态?
  3. .git 目录里有什么?objects/refs/ 各存什么?

信息

路径
/tech-stacks/git/tutorial/Git 版本控制入门到协作.md
更新时间
2026/5/31