Python 现代开发学习笔记

(十七)在 VS Code 中查看、暂存与提交

1. 打开正确的仓库目录

用“文件 → 打开文件夹”打开 reading-git,或者在该目录执行 code .。按 Ctrl+Shift+G 打开 Source Control(源代码管理)。Git 支持内置在 VS Code 中,本机仍需要安装 Git;Python 扩展负责 Python 编辑和调试,不代替 Git。

尚未初始化的练习目录中,选择 Initialize Repository 对应 git init。已有仓库打开后直接显示状态。窗口同时发现多个仓库时,先在 Repositories 中选对项目,避免把另一份目录的修改当作本次工作。VS Code 源代码管理入门

2. 对照差异选择提交内容

编辑 README 并保存,它进入 Changes(更改)。点击文件名查看差异:左侧是这次比较的原内容,右侧是新内容,增删行直接对应文本变化。

在阅读练习的小项目中打开 README 差异,左侧为 30 分钟,右侧为 35 分钟

这时 README 只出现在“更改”中。点击文件右侧的 +,把 35 分钟这一版放进暂存区,然后继续编辑文件。

  1. 在 Changes 中查看 README 的 30 → 35。
  2. 点击该文件右侧 +(Stage Changes),它进入 Staged Changes(暂存的更改)。
  3. 再把工作目录中的 35 改成 40 并保存。同一文件现在可能同时出现在两组中。
  4. 分别打开两个文件项:Staged Changes 对应 30 → 35,Changes 对应 35 → 40。
  5. 决定只保留已暂存的 35 时,在 Changes 中对这次编辑选择 Discard Changes(放弃更改),工作目录被暂存版本替换;再看两组,确认只剩要提交的修改。
  6. 在输入框写提交说明,点击 Commit(提交),保存暂存区中的内容。
打开暂存的更改中的 README,差异仍是上一次提交的 30 分钟到暂存版本的 35 分钟

操作到第 4 步时,先点开“暂存的更改”中的 README。上图的标题带有“索引”,比较结果为 30 → 35。下面再点开“更改”中的同名文件:

打开更改中的 README,比较暂存区的 35 分钟与工作目录中的 40 分钟

这次标题带有“工作树”,比较结果为 35 → 40。两个文件项指向同一个 README,只是比较的版本不同;提交暂存区时,保存的是 35 分钟。

这与第三节的命令行过程完全对应。−(Unstage Changes) 只取消暂存,编辑还在;Discard Changes 会替换工作目录内容,不能把两个按钮当成同一种“撤销”。

VS Code的Changes与Staged Changes分别对应两份差异,同一文件可以同时出现

练习第三节已经提交过后,可以另外改一处说明再观察;表中的数字只是重演同一个暂存过程。提交前显式暂存,避免把界面询问中的“暂存全部并提交”当成已经逐项查看过。

3. 暂存选中行与检查提交历史

在差异编辑器中选中准备保存的新增或修改行,右键选择 Stage Selected Ranges(暂存所选范围),再查看 Staged Changes。这样同一文件中的两项编辑可以分别进入提交。它与 git add -p 都在选择下一份快照的内容。暂存与提交

Source Control Graph 显示提交、分支与远程引用,点击提交可以检查文件差异;文件的 Timeline 也能查看与该文件有关的历史。读图时继续区分 main、功能分支与 origin/main,箭头或分支名并不代表文件又复制了一份。

4. 为本地项目添加远程地址

远程操作示例使用 作者的 Gitea。先在自己的账户下准备一个名为 reading-git 的空远程仓库,再复制仓库页面中的 HTTPS 克隆地址。下面的 YOUR_ACCOUNT 表示自己的用户名,使用前换成实际账户名。

这里继续第十一节连接 GitHub 的过程:建空仓库、复制地址、添加远程、首次推送。Gitea 与 GitHub 的网页入口和登录方式各自对应所用网站,VS Code 中的 Git: Add Remote 接收两者的仓库地址。使用 GitHub 时粘贴 GitHub 地址,使用 Gitea 时粘贴 Gitea 地址,后面填写远程名和推送分支的步骤相同。

在 Gitea 的新建仓库页面选择所属账户、填写名称,勾选“设为私有”。本地已经有提交时,让“初始化仓库”保持不勾选。实拍中的独立仓库名为 python-notes-git-lab;连接时使用自己页面上的实际地址。

Gitea 新建仓库表单填写独立示例名称并勾选私有

创建后的空仓库显示快速开始命令。此时网站还没有文件,本地的提交要经过首次 push 才会出现。

Gitea 私有空仓库显示添加 origin 与首次推送的命令

按 Ctrl+Shift+P,执行 Git: Add Remote(Git: 添加远程存储库),粘贴地址,选择“从 URL 添加远程存储库”,再把远程名称填写为 origin。

在 VS Code 的添加远程地址输入框中填写 gitea.kronecker.cc 的示例仓库地址

这一步把地址记录在本地仓库中。对应的命令为:

# 在 reading-git 目录中保存远程地址,使用前替换 YOUR_ACCOUNT。
git remote add origin https://gitea.kronecker.cc/YOUR_ACCOUNT/reading-git.git
# 核对 origin 的读取地址与推送地址。
git remote -v

已经配置过 origin 时,用 git remote set-url origin 新地址 修改地址。比如第十一节已经将 origin 连到 GitHub,现在改用这里的 Gitea 地址,就执行 set-url,再用 git remote -v 核对;Add Remote 留给尚未登记的远程名。完成本地提交后,首次推送执行 git push -u origin main,按远程服务的提示完成认证。以后在这个分支上使用 Push,就会向已设置的上游推送提交。VS Code 添加远程与推送

换一个目录取得项目时,执行 Git: Clone,粘贴同一个 HTTPS 地址,再选择保存项目的父目录;也可以在父目录中使用命令:

# 克隆到新目录;地址中的用户名仍需换成自己的实际账户名。
git clone https://gitea.kronecker.cc/YOUR_ACCOUNT/reading-git.git reading-copy
# 进入克隆目录,核对当前分支和远程连接。
cd reading-copy
git status
git remote -v

Add Remote 为现有本地仓库记录地址,Clone 则从远程建立一份本地仓库。后面的 Fetch、Pull 与 Push 仍然分别对应取得提交、整合提交和发送提交。

推送后,仓库页面能看到文件和 README;右侧克隆菜单给出 HTTPS 地址,复制后可交给 VS Code 的 Clone 使用。

Gitea 推送后的文件列表与 HTTPS 克隆地址

点击提交说明,继续检查网站收到的改动。本例把每日阅读目标从 30 分钟改为 35 分钟:红色行是旧值,绿色行是新值,与本地 git diff 的判断方法相同。

Gitea 提交页展示每日阅读目标从 30 分钟改为 35 分钟

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