3.1 创建第一个 Git 仓库
前置知识:第2章(终端与 Shell)
预计时间:12 分钟
练习环境:Bash 与 Git 2.28 或更高版本;所有配置只写入临时仓库
完成标志:能创建临时仓库,并解释工作区、暂存区和 HEAD
Git 不会记录每次按键,也不会替你判断什么值得保存;它只保存你明确放入暂存区并提交的项目状态。这正是版本控制与自动备份最先要分开的地方。
建立隔离仓库
bash
git --version
workdir=$(mktemp -d)
git init -b main "$workdir/project"
cd "$workdir/project"
git config user.name 'Workshop Learner'
git config user.email 'learner@example.invalid'身份配置只写入这个仓库,没有使用 --global。本章使用 git init -b、git switch 和 git restore,需要 Git 2.28 或更高版本;-b main 显式指定初始分支名,结果不会受机器默认配置影响。
bash
printf '%s\n' '# Workshop Project' > README.md
printf '%s\n' "print('hello')" > main.py
git status --short?? 表示未跟踪文件。Git 还没有把它们放进任何提交。下一步的 git diff 此时可能没有输出,因为普通 diff 不显示未跟踪文件的内容;暂存后才能用 git diff --staged 审查这两份新文件。
暂存并提交
bash
git diff
git add README.md main.py
git diff --staged
git commit -m 'Initialize workshop project'
git status
git log --oneline --decorate第一次提交后,可以用三层模型定位变化:
text
工作区 -- add --> 暂存区(index) -- commit --> HEAD 指向的提交- 工作区是当前能编辑的文件。
- 暂存区描述下一次提交要保存什么。
HEAD通常指向当前分支,当前分支再指向某次提交。
git add . 只处理当前目录向下的路径,也可能误收日志或密钥。初学阶段先运行 git status --short、git diff,再点名文件。需要拆分一份文件里的不同改动时使用 git add -p。
提交是快照模型
提交记录项目树、父提交、作者与提交者信息和消息。Git 会复用相同对象,因此“快照”描述的是观察方式,不表示每次都复制一整份磁盘目录。
bash
git show --stat --oneline HEAD
git show HEAD:README.md提交消息应帮助后来者理解改动目的。完成本页后先保留 $workdir,后续章节继续使用;若停止练习,离开目录并检查路径后删除它。