跳转至

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,私钥只保留在自己的电脑中。

  1. 在终端中运行 ls ~/.ssh,查看是否已有 id_ed25519.pub 等公钥。已有可用密钥时可以直接使用,不要覆盖原文件。
  2. 如果没有密钥,可运行以下命令,将邮箱替换为自己的邮箱,并按提示选择保存位置和口令。若提示已有同名文件,不要覆盖;先确认其用途或另选文件名。

    ssh-keygen -t ed25519 -C "你的邮箱"
    
  3. 查看公钥并复制完整一行。以下示例使用默认文件名:

    cat ~/.ssh/id_ed25519.pub
    
  4. 打开 GitLab 的用户设置,进入 SSH keys,添加公钥,填写便于识别设备的名称。用于拉取和推送代码时,选择 Authentication 即可,并按页面要求设置有效期。

  5. 测试连接:

    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 只对未跟踪文件生效。密钥若已经进入提交历史,仅删除文件或加入忽略规则不能清除旧版本中的密钥,应立即到服务平台撤销或更换该密钥,再处理仓库历史。

参考资料