Git 提交变更全流程详解

发布于:2025-06-20 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、文件状态的生命周期

Git 将工作目录中的每个文件分为两种状态:

  • Untracked(未跟踪):未纳入上一次提交,也未加入暂存区。

  • Tracked(已跟踪):已纳入上一次提交或已通过 git add 加入暂存区,可处于:

    • Modified(已修改):工作目录中有改动,但尚未暂存。
    • Staged(已暂存):改动已加入暂存区,准备提交。
Untracked → git add → Staged → git commit → Tracked & Unmodified
Tracked & Unmodified → 编辑 → Tracked & Modified → git add → Staged → git commit …

二、检查文件状态:git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
  • Untracked files:未跟踪的新文件
  • Changes not staged for commit:已跟踪文件的改动,未暂存
  • Changes to be committed:已暂存,等待提交

简洁模式

$ git status -s
 M README.md       # 已暂存修改(左列 M),工作区未变更(右列空格)
M  main.go         # 工作区已修改(右列 M),未暂存
?? temp.log        # 新文件,未跟踪

三、跟踪新文件:git add

新建文件后,Git 默认不跟踪,需手动加入暂存区:

$ echo '项目说明' > README.md
$ git status
Untracked files:
  README.md

$ git add README.md
$ git status
Changes to be committed:
  new file: README.md
  • git add <路径>:文件或目录均可,目录会递归添加所有内容。
  • 每次 git add,Git 会将当时文件的完整快照存入暂存区。

四、暂存已修改文件

编辑已跟踪文件后,状态变为“未暂存”:

$ vim CONTRIBUTING.md
$ git status
Changes not staged for commit:
  modified: CONTRIBUTING.md

再次执行 git add 即可将最新改动暂存:

$ git add CONTRIBUTING.md
$ git status
Changes to be committed:
  modified: CONTRIBUTING.md

注意:若在 git add 后继续编辑,暂存区仍保留上次版本,需重新执行 git add

五、提交改动:git commit

确认暂存区内容无误后提交:

# 交互式输入提交信息
$ git commit

# 或直接指定
$ git commit -m "新增 README.md 并更新贡献指南"
  • 提交后生成唯一 SHA-1 校验值。
  • 未暂存的改动不会包含在本次提交中。

5.1 跳过暂存区

若只需提交所有已跟踪文件的改动,无需手动 git add,可用:

$ git commit -a -m "更新所有已跟踪文件"

警告-a 仅针对已跟踪文件,新文件仍需 git add

六、忽略不必要的文件:.gitignore

在项目根目录创建 .gitignore,列出无需纳入版本库的文件/目录模式:

# 忽略编译产物
*.[oa]
# 忽略编辑器临时文件
*~
# 忽略构建目录
build/
# 但保留 lib.a
!lib.a
  • 支持通配符 *?、字符集 [abc]、递归匹配 **
  • 可在子目录添加独立 .gitignore,仅对本目录及子目录生效。

七、查看差异:git diff

  • 未暂存改动git diff
  • 已暂存改动git diff --staged(或 --cached
$ git diff CONTRIBUTING.md          # 未暂存部分
$ git diff --staged README.md       # 已暂存部分

想用可视化工具查看差异,可执行:

$ git difftool

八、删除与重命名文件

8.1 删除文件

# 删除并暂存
$ git rm obsolete.txt

# 仅取消跟踪,保留工作区
$ git rm --cached temp.log

8.2 重命名/移动文件

# 推荐
$ git mv old.txt new.txt

# 等价于
$ mv old.txt new.txt && git rm old.txt && git add new.txt

Git 会在后续合并和比较时智能检测重命名。

九、实践建议

  1. 频繁提交:保持小颗粒度的提交,便于回溯与审查。
  2. 合理摘取:利用暂存区,分组提交相关改动,保持提交日志清晰。
  3. 撰写规范:提交信息应包含“动词+目的”,并简要说明为何改动。
  4. 监控状态:提交前务必 git statusgit diff,确保无漏网改动。

结语

本文全面覆盖了 Git 提交流程中「状态检查 → 跟踪/暂存 → 提交」的各个环节,并辅以跳过暂存区、忽略文件、查看差异、文件删除与重命名等实用操作。掌握这些基础命令后,您即可更高效地管理版本历史、规范团队协作,也为后续深入学习分支管理与冲突解决打下坚实基础。下一篇,我们将带您探索 Git 分支模型与多分支协作实战。


网站公告

今日签到

点亮在社区的每一天
去签到