学习前提

理解提交标识与分支;标签练习不发布真实版本。

使用Git 2.35+与Bash兼容终端(Windows可用Git Bash)。每章完整代码都会创建独立临时目录;仅在练习仓库运行。git config仅修改该仓库,示例身份不是你的真实提交身份。临时目录不会自动删除,可在完成后自行清理。

本课完成后你能做什么

为验证过的提交建立标签,区分标签和移动分支。

先理解机制

分支通常随新提交前进,标签用于给某个历史对象一个稳定名称。轻量标签是简单引用;附注标签还有标签说明、作者等元数据,适合为发布记录背景。

标签不会证明代码通过测试。先确认工作区与测试结果,再标记目标提交。标签名称如v1.0.0只是约定;版本号应表达项目实际兼容性变化。

普通分支push不保证所有标签一并上传,需要明确推送目标标签。已经分享的发布标签不应随意移动,否则不同使用者可能用同一名字得到不同内容。

可运行示例

lab=$(mktemp -d)
cd "$lab"
git init -b main .
git config user.name "Honeysuck Learner"
git config user.email 'learner'@'example.invalid'
git config commit.gpgsign false
git config core.autocrlf false
printf 'Start learning\n' > notes.txt
git add notes.txt
git commit -m "Start learning notes"
git tag -a v1.0.0 -m "First verified notebook"
printf 'Next version draft\n' >> notes.txt
git add notes.txt
git commit -m "Continue after first release"
git tag --list
git show v1.0.0:notes.txt
git log -1 --format=%s 'v1.0.0^{commit}'
git log -1 --format=%s HEAD
git diff v1.0.0 HEAD -- notes.txt

推演与验证

v1.0.0仍对应Start learning notes提交,标签文件只有Start learning;main已前进到Continue after first release,两者之间的差异显示新草稿。

常见错误与边界

直接检出标签可能进入detached HEAD状态。要从旧版本修复并继续提交,应创建分支,例如git switch -c fix/v1 v1.0.0。

动手练习

从v1.0.0新建fix/v1,确认新版本草稿没有出现在该分支。

参考解法与理由

执行git switch -c fix/v1 v1.0.0,cat notes.txt仅显示Start learning。main中的后续提交并未丢失,切回main即可看到。

进一步阅读