git提交前必须先git add,因未暂存的修改不会被提交;正确流程是改代码→git status确认→git add指定文件→git commit -m"描述"。

git commit 提交前必须先 git add
很多人执行 git commit -m "xxx" 后发现没提交成功,其实是工作区修改还没暂存。Git 不会自动跟踪未 git add 的改动,哪怕文件已修改且 git status 显示为 “modified”。
正确流程是:
- 改完代码后,用
git status确认哪些文件有变更 - 对要提交的文件执行
git add <file></file>(或git add .暂存当前目录所有已跟踪的变动) - 再
git commit -m "描述文字"
注意:git add . 不会加入新创建但未跟踪的文件(untracked),需显式 git add <new-file></new-file> 或用 git add -A;另外,git commit -a 可跳过 git add,但它只作用于**已被 Git 跟踪过**的文件,对全新文件无效。
打标签用 git tag,但默认是轻量标签
git tag v1.0 会创建一个轻量标签(lightweight tag),它只是个指向某次提交哈希的引用,不带额外元数据。多数场景下你真正需要的是附注标签(annotated tag)——它会生成一条独立的 tag 对象,包含作者、时间、GPG 签名(可选)和完整消息。
推荐始终用附注标签:
git tag -a v1.0 -m "release version 1.0"- 不加
-m会打开编辑器让你写消息,和git commit类似 - 标签默认只存在本地,
git push不会自动推送标签
如果已经打了轻量标签,不能直接升级成附注标签,得先删掉重打:git tag -d v1.0,再用 -a 重建。
推送标签到远程仓库必须显式指定
git push 默认只推分支,不会推任何标签。想让团队或 CI 看到你的标签,必须主动推送:
- 推单个标签:
git push origin v1.0 - 推所有本地标签:
git push origin --tags
⚠️ 注意:--tags 是“推所有本地存在的标签”,不管它们是否已存在于远程。如果误推了测试标签(如 v1.0-beta),后续删除后再次 --tags 不会自动清理远程旧标签——得手动 git push origin :refs/tags/v1.0-beta 删除远程对应标签。
检出标签时默认进入“分离头指针”状态
用 git checkout v1.0 或 git switch --detach v1.0 切到标签后,HEAD 不再指向分支,而是直接指向该提交。此时任何新提交都会变成“游离提交”(detached HEAD),后续难以找回。
安全做法是:
- 仅查看代码或构建发布包:直接
git checkout v1.0没问题 - 想基于该版本修 bug:先建新分支,
git switch -c hotfix-v1.0.1 v1.0 - 确认当前是否处于分离状态?看
git status输出里有没有 “HEAD detached at v1.0”
标签本身不可修改,也不该修改——它是版本快照的锚点。所有后续变更都应通过新提交 + 新标签来表达。











