Git 使用基础
Git 用来保存代码的版本历史,记录每次改动,并在需要时查找、比较旧版本。GitLab、GitHub 等平台则用于托管远程仓库,方便备份与分享。使用 Git 不要求先注册托管平台。
检查点 1需要在本地建立仓库并完成首次提交,在报告中简述完成情况即可,无需提交代码仓库。从检查点 2 起提交含版本历史的仓库。每完成一项小改动就提交一次,比最后补一条“大作业完成”更能说明实际开发过程。
一、安装与身份配置
安装 Git
- Windows: 从 Git 官网下载安装程序,安装后打开 Git Bash。
- macOS: 先在终端运行
git --version;如果未安装,按系统提示安装命令行工具,或参考 Git 官方安装说明。 - Linux: 使用发行版的软件包管理器安装。例如 Ubuntu、Debian 可运行
sudo apt install git。
本文命令可在 Git Bash、macOS 或 Linux 终端中执行。先检查是否能找到 Git:
git --version
设置提交者信息
把下面的姓名和邮箱换成自己的信息:
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"
这些信息会写入提交记录,不是 GitLab 登录凭据。--global 表示对当前电脑用户的各仓库生效;如果只想修改某个仓库,在该仓库目录中执行时去掉 --global。
二、创建仓库与首次提交
1. 进入项目目录并初始化
在自己的项目文件夹中打开终端,执行:
git init
git status
git init 会建立 .git 目录,用于保存版本历史。不要在整个主目录、下载目录或包含多个无关项目的目录中初始化。若已经使用 git clone 获取仓库,可跳过初始化。
2. 准备文件和忽略规则
可以先写一份 README.md,说明项目名称、目标和当前状态,再加入已有的代码或实践文件。
在项目根目录创建 .gitignore。例如,Python 或网页项目常见的忽略规则包括:
# 本地凭据与配置
.env
.env.*
!.env.example
# Python 环境与缓存
.venv/
venv/
__pycache__/
*.pyc
# JavaScript 依赖
node_modules/
根据项目实际情况增删规则。.env.example 只能包含占位值,不能含真实密钥;AI 工具的配置文件如果含凭据,也应加入忽略规则。源代码、项目说明、依赖清单和锁文件通常需要保留在仓库中。
3. 检查、暂存并提交
git status
git diff
git add .
git diff --staged
git commit -m "初始化项目说明与首次实践"
git log --oneline
git status
各条命令的作用如下:
| 命令 | 作用 |
|---|---|
git status |
查看当前分支、新文件,以及已修改、已暂存的文件 |
git diff |
查看尚未暂存的已跟踪文件改动;新文件内容需自行打开检查 |
git add . |
将当前目录下未被忽略的新增、修改和删除纳入暂存区 |
git diff --staged |
查看即将进入这次提交的内容,包括已暂存的新文件 |
git commit -m "说明" |
将暂存区内容保存为一次本地提交 |
git log --oneline |
查看提交编号和简短说明 |
暂存区用于选择“这一次提交包含什么”。如果只想提交某些文件,可以改用 git add README.md 等具体路径。文件在 git add 后又有修改,需要再次暂存才能把新改动放入同一次提交。
提交成功后,git log --oneline 应能看到自己的提交。若 git status 显示 nothing to commit, working tree clean,表示当前没有待提交改动。
三、开发中如何使用
平时按“修改 → 检查 → 暂存 → 提交”的顺序重复操作即可。
- 每次提交围绕一项相对完整的改动,例如“增加 CSV 导入”“修复空输入处理”。提交说明写清做了什么。
- 让 AI 大幅修改代码前,先检查并提交当前可用状态,之后更容易比较变化。
- 骨架能运行、主页能打开、接口能响应等阶段都适合留下一次提交,不必等整个项目完成。
- AI 对话记录另行保存,在实践说明中注明相关提交编号。Git 历史不能代替 AI 交互记录。
可用以下命令查看某次提交涉及的文件和改动;将 提交编号 换成 git log --oneline 中的实际编号:
git show --stat 提交编号
git show 提交编号
四、使用清华 GitLab 托管仓库(可选)
远程仓库便于备份和提交链接。登录清华 Git 服务,创建自己的项目;不需要将课程作业设为公开。使用私有仓库提交作业时,按网络学堂说明给助教提供访问权限。
配置 SSH 认证
SSH 使用一对密钥认证本机。公钥可以添加到 GitLab,私钥只保留在自己的电脑中。
- 在终端中运行
ls ~/.ssh,查看是否已有id_ed25519.pub等公钥。已有可用密钥时可以直接使用,不要覆盖原文件。 -
如果没有密钥,可运行以下命令,将邮箱替换为自己的邮箱,并按提示选择保存位置和口令。若提示已有同名文件,不要覆盖;先确认其用途或另选文件名。
ssh-keygen -t ed25519 -C "你的邮箱" -
查看公钥并复制完整一行。以下示例使用默认文件名:
cat ~/.ssh/id_ed25519.pub -
打开 GitLab 的用户设置,进入 SSH keys,添加公钥,填写便于识别设备的名称。用于拉取和推送代码时,选择 Authentication 即可,并按页面要求设置有效期。
-
测试连接:
ssh -T git@git.tsinghua.edu.cn
首次连接可能要求确认服务器指纹。先与 GitLab 的当前实例配置核对,再接受;若指纹不符,停止连接并联系助教。出现包含自己 GitLab 用户名的欢迎信息,说明认证成功。
只复制 .pub 公钥文件,不要上传无 .pub 后缀的私钥,也不要把私钥交给 AI 工具。采用非默认密钥文件名时,可参阅 GitLab SSH 文档配置对应身份。
本地已有仓库:连接空的远程项目
如果已按前文完成 git init 和首次提交,在 GitLab 创建一个空项目,不要同时勾选初始化 README、许可证或 .gitignore。从项目页面复制 Clone with SSH 地址,然后执行:
git remote add origin 你的仓库SSH地址
git remote -v
git branch --show-current
git push -u origin 当前分支名
把 你的仓库SSH地址 和 当前分支名 替换为实际值。分支可能叫 main 或 master,以 git branch --show-current 的输出为准,不必为了课程改名。完成首次推送后,之后通常只需运行 git push。
远程已有仓库:克隆到本地
如果已经在 GitLab 初始化了仓库,或从已有开源项目开始,可以直接克隆:
git clone 你的仓库SSH地址
cd 克隆得到的目录
git log --oneline
克隆会带下代码与历史,并设置远程地址。此后按前文方法修改、暂存和提交,再执行 git push。向某个远程仓库推送需要写入权限;开源项目优化应推送到自己有权限的仓库,例如自己的 Fork,保留上游历史。
commit 只保存到本机,push 才会发送到远程。 推送后在 GitLab 页面检查提交编号和文件。仓库链接、推送操作都不能代替网络学堂上的作业提交。
五、常见问题
| 现象 | 检查方法 |
|---|---|
git 命令找不到 |
确认已安装 Git,重新打开终端后运行 git --version |
not a git repository |
用 pwd 检查当前目录,进入项目目录;新项目还需执行 git init |
Author identity unknown |
设置 user.name 和 user.email 后再提交 |
| 新文件没有进入提交 | 先看 git status,执行 git add 文件名,再用 git diff --staged 核对;git commit -am 不会加入未跟踪的新文件 |
| 误将文件加入暂存区 | 已有提交的仓库可用 git restore --staged 文件名 取消暂存,文件内容仍保留在本地 |
remote origin already exists |
用 git remote -v 检查已有地址,不要反复执行 git remote add |
Permission denied (publickey) |
核对连接域名、GitLab 账号、公钥和有效期;使用非默认文件名时核对 SSH 配置 |
| 推送被拒绝,提示远程已有更新 | 先用 git fetch origin 获取远程信息,检查差异后再合并;不清楚如何处理时保留现场联系助教,不要直接强制推送 |
.gitignore 只对未跟踪文件生效。密钥若已经进入提交历史,仅删除文件或加入忽略规则不能清除旧版本中的密钥,应立即到服务平台撤销或更换该密钥,再处理仓库历史。