Python 现代开发学习笔记

(三)工作目录、暂存区与提交快照

1. 建立第一次提交

先运行程序,再选择要保存的文件。starter 同时提供 .gitignore 和 .gitattributes,分别约定忽略的文件与文本格式,第五节会结合实际差异展开:

# 本章使用前文已经选定的 Python 3.12 环境。
python reading.py
python check_reading.py
# 显式选择程序和文档;-- 后面按路径解释参数。
git add -- reading.py check_reading.py README.md .gitignore .gitattributes
git diff --cached
git commit -m "保存阅读统计程序和检查"
git log --oneline -1

程序输出 2,检查输出 阅读统计检查通过。-m 后面的文字是提交说明。第一次提交记录一份选定文件的快照、作者、说明和提交关系;终端显示的短哈希用于识别它。下面用 A 表示这个提交,图里的字母是便于跟踪的标记,实际操作使用 Git 显示的哈希或分支名。

git status --short 用两列表示变化:第一列比较暂存区与当前提交,第二列比较工作目录与暂存区。?? 表示还没有被跟踪的新文件。

显示 当前文件状态
M README.md 只有工作目录比暂存区有修改
M README.md 修改已暂存,工作目录与暂存区一致
MM README.md 暂存后又编辑过,两个位置保存了不同修改
A notes.md 新文件已经暂存

2. 暂存之后再次编辑

把 README 的 30 改成 35,保存并暂存;随后又把同一处改成 40,只保存文件:

# README 已从 30 改为 35 并保存,此时把 35 的版本放进暂存区。
git add -- README.md
# 再在编辑器中把 35 改为 40 并保存,然后分别查看两个差异。
git status --short
git diff -- README.md
git diff --cached -- README.md

此时显示 MM README.md。git diff 显示工作目录中的 35 → 40;git diff --cached 显示提交 A 到暂存区的 30 → 35。直接 commit 会保存 35,因为 commit 使用暂存区,不会自动重新读取编辑器里的 40。Git 的暂存过程

README 的 30、35、40 分别存在提交、暂存区与工作目录中的四步变化

这次实际想保存 35。下面从暂存区恢复工作目录中的 README,40 的这次编辑被替换,再提交已经暂存的修改:

# 把工作目录中的 README 恢复成暂存区的 35,暂存区本身不变。
git restore --worktree -- README.md
git diff --cached -- README.md
git commit -m "把默认目标说明修正为35分钟"

得到提交 B:README 与程序中的目标一致。提交之后 git status 应显示干净,含义是已跟踪文件没有待暂存或待提交的变化,不代表代码已经通过所有测试。restore 的来源与目标

笔记正文与全部题解 · Ctrl / ⌘ K