(十七)在 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 只出现在“更改”中。点击文件右侧的 +,把 35 分钟这一版放进暂存区,然后继续编辑文件。
- 在 Changes 中查看 README 的
30 → 35。 - 点击该文件右侧 +(Stage Changes),它进入 Staged Changes(暂存的更改)。
- 再把工作目录中的 35 改成 40 并保存。同一文件现在可能同时出现在两组中。
- 分别打开两个文件项:Staged Changes 对应
30 → 35,Changes 对应35 → 40。 - 决定只保留已暂存的 35 时,在 Changes 中对这次编辑选择 Discard Changes(放弃更改),工作目录被暂存版本替换;再看两组,确认只剩要提交的修改。
- 在输入框写提交说明,点击 Commit(提交),保存暂存区中的内容。
操作到第 4 步时,先点开“暂存的更改”中的 README。上图的标题带有“索引”,比较结果为 30 → 35。下面再点开“更改”中的同名文件:
这次标题带有“工作树”,比较结果为 35 → 40。两个文件项指向同一个 README,只是比较的版本不同;提交暂存区时,保存的是 35 分钟。
这与第三节的命令行过程完全对应。−(Unstage Changes) 只取消暂存,编辑还在;Discard 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;连接时使用自己页面上的实际地址。
创建后的空仓库显示快速开始命令。此时网站还没有文件,本地的提交要经过首次 push 才会出现。
按 Ctrl+Shift+P,执行 Git: Add Remote(Git: 添加远程存储库),粘贴地址,选择“从 URL 添加远程存储库”,再把远程名称填写为 origin。
这一步把地址记录在本地仓库中。对应的命令为:
# 在 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 使用。
点击提交说明,继续检查网站收到的改动。本例把每日阅读目标从 30 分钟改为 35 分钟:红色行是旧值,绿色行是新值,与本地 git diff 的判断方法相同。