Skip to content

Git 与 GitHub ​

为什么需要 Git? ​

如果你写过一些需要频繁改动的文档,你一定不会对这样的文件命名感到陌生:

项目_草稿.docx

项目_修改版.docx

项目_最终版.docx

项目_绝对不改最终版.docx

项目_打死不改最终版_v2.docx

当你发现 绝对不改版 里有一段内容写坏了,想要找回第一天写的 草稿 里的某句话时,往往已经找不到了。如果这时候还要和三四个同学一起改同一份文件,大家互相传来传去,最后根本不知道谁改了什么,甚至会把别人的心血不小心覆盖掉。

Git 就是为了终结这种混乱而诞生的。 简单来说,Git 是一个版本控制系统。你只需要把每次更改的内容告诉 Git,它就能帮你自动、高效地管理文件的每一次修改。既方便,又因为 Git 会对历史进行智能压缩存储,不会像"每个版本存一个文件"那样占用大量磁盘空间。

安装 Git ​

  1. 进入官网,选择 “Git for Windows/x64 Setup” 下载。下载可能较慢,读者可以参考 爱的魔法 加快下载速度。
  2. 一路点下一步,到“Choosing the default editor”这一步时,推荐选择“Visual Studio Code”。
  1. 一路点下一步,直到安装完成。此时,右键文件管理器中任一文件夹的空白部分,应该会出现“Open Git Bash here”选项(Windows 11 用户需要点击“显示更多选项”来发现这个选项)。
  2. 点击“Open Git Bash here”。如果出现一个如下图所示的黑窗口,证明 Git 安装成功。

使用 Git ​

创建仓库 ​

仓库(Repository,简称 Repo)就是 Git 用来保存你所有文件历史记录的“小基地”。你可以把任何一个普通文件夹变成 Git 仓库。接下来让我引导你一步步创建第一个 Git 仓库。

  1. 选择一个合适的地方,新建一个空文件夹,这就是我们的仓库所在的文件夹;
  2. 在这个空文件夹右键,选择 “Open Git Bash here”,打开 Git Bash。
  3. 输入以下命令:
sh
git init

如果你是第一次使用 Git,那么 Git 大概会输出以下信息:

hint: Using 'master' as the name for the initial branch. This default branch name
hint: will change to "main" in Git 3.0. To configure the initial branch name
hint: to use in all of your new repositories, which will suppress this warning,
hint: call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
hint:
hint: Disable this message with "git config set advice.defaultBranchName false"
Initialized empty Git repository in /home/git-test-user/git/.git/

上面的输出告诉我们:

Initialized empty Git repository in /home/git-test-user/git/.git/

这说明当前目录已经顺利初始化,成为了一个 Git 仓库!此时文件夹下会生成一个隐藏的 .git 文件夹,这就是 Git 用来记录版本历史的核心数据库,请不要手动修改或删除它。

配置你的身份 ​

在第一次提交之前,Git 需要知道你的名字和邮箱。这些信息会被附加在提交记录里,方便日后查看"这段代码是谁写的"。请依次运行:

sh
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"

第一次提交变更 ​

在动手敲命令之前,我们需要先搞懂 Git 里的两个核心概念:暂存区(Staging Area) 和 提交(Commit)。

我们可以把 Git 的工作方式类比为“拍照发朋友圈”:

  • 工作区(Working Directory):就是你当前的文件夹。你在里面新建、修改或删除文件的过程,就像是在布景和摆姿势。
  • 暂存区(Staging Area):就像是打开相机胶卷,选择要上传的照片。你可以选一张,也可以选多张。选中的文件就是被 git add 标记的文件。
  • 提交(Commit):相当于点击“发送朋友圈”。一旦点击提交,这一刻文件夹的状态就会被永久按下快门,生成一个独一无二的“历史记录版本”。

也就是说:修改文件(准备) → git add(挑选) → git commit(拍照保存)。

了解了这个流程,我们来动手操作一遍:

新建测试文件 ​

最简单的方式是直接在 Git Bash 里输入下面的命令,它会创建 README.md 并写入 Hello World!:

sh
echo "Hello World!" > README.md

查看仓库状态 ​

想知道现在文件夹里有什么变化,可以随时运行:

sh
git status

输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

nothing added to commit but untracked files present (use "git add" to track)

你会看到 README.md 显示为红色(Untracked files),表示 Git 注意到了这个新文件,但它目前还是草稿,尚未被放入暂存区。

将文件添加到暂存区 ​

使用以下命令把 README.md 放到暂存区:

sh
git add README.md

此时再次运行 git status:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

你会发现文件名变成了绿色(Changes to be committed),说明它已经准备好提交了。

提交变更到本地仓库 (git commit) ​

使用 git commit 命令正式把暂存区里的变更永久保存下来。为了以后能看懂这次提交改了什么,我们需要用 -m 参数附上一句简单明确的提交说明:

sh
git commit -m "feat: 新建 README 文件"

按下回车,看到:

[master (root-commit) 6b83eb4] feat: 新建 README 文件
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

就代表我们的第一个提交创建成功了!

查看提交历史 ​

运行

sh
git log

你会看到一条包含你的名字、邮箱、提交时间和提交说明的清晰记录。

commit 6b83eb430a3d1e3e1dcf02ef7f006b0deedad6d6 (HEAD -> master)
Author: SakiMidare <sakimidare@outlook.com>
Date:   Sat Aug 8 13:54:22 2026 +0800

    feat: 新建 README 文件

第二次提交变更 ​

Git 的工作流是可重复的:修改 → 暂存 → 提交。现在给 README.md 加点内容,完整走一遍第二次提交。在 Git Bash 里运行(>> 表示"追加到文件末尾"):

sh
echo "Hello Git!" >> README.md

先看看当前状态:

sh
git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

README.md 显示为 "modified"(被修改)。想确认具体改了什么,运行:

sh
git diff
diff --git a/README.md b/README.md
index 557db03..53fa24f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 Hello World!
+Hello Git!

以 + 开头的行表示新增的内容,以 - 开头的行表示被删除的内容。确认改动无误后,和第一次一样提交:

sh
git add README.md
git commit -m "docs: 更新 README"

再用 git log 查看历史,现在有两条记录了。加上 --oneline 参数可以让每条记录只占一行,历史一目了然:

sh
git log --oneline
7bc301e (HEAD -> master) docs: 更新 README
6b83eb4 feat: 新建 README 文件

最上面是最新的提交。HEAD -> master 中的 HEAD 表示"当前所在的位置",也就是你当前提交正停留在这里。

什么是 GitHub? ​

如果说 Git 是你电脑里的“本地相册”,那么 GitHub 就是“代码界的朋友圈”。

GitHub 是目前全球最大的开源代码托管平台,基于 Git 构筑。通过 GitHub,你可以:

  1. 云端备份:把本地代码同步到云端,换台电脑也能继续工作,再也不用担心硬盘损坏。
  2. 开源交流:浏览、学习、使用全球优秀开发者开源的软件和代码。
  3. 多人协作:和团队成员在同一个项目中并行开发、提交代码、互评审查。

将代码推送到 GitHub ​

接下来,我们把刚才在本地创建并提交的仓库,同步到 GitHub 云端。

注册与登录 GitHub ​

  1. 打开 GitHub。
  2. 点击右上角 Sign up 注册账号(如果已有账号直接点击 Sign in 登录)。
  3. 按照提示完成邮箱验证。

将本地 SSH 公钥上传到 GitHub 上 ​

我们可以把 SSH 密钥想象成一对密码锁:

  • 私钥(Private Key):保存在你本地电脑上,绝对不能给别人看。
  • 公钥(Public Key):上传到你的 GitHub 账号里,可以公开。

只要两边对上了,以后你在这台电脑上推拉代码时,GitHub 就能自动确认你的身份,再也不需要每次都输入密码或进行网页验证。

创建 SSH 密钥对的步骤请参考 SSH 远程登录,如果已创建密钥对,则忽略这一步。

创建完成之后,请查看你的公钥:

sh
cat ~/.ssh/id_ed25519.pub

复制完整输出内容(一般是一个字符串和一个邮箱),粘贴到 GitHub 设置 → SSH Key → Add new SSH Key 的 Key 输入框中,标题可以随便取名(见下):

点击 “Add SSH Key” 并验证通过。

如果配置完成后,运行

sh
ssh -T git@github.com

输出

Hi <用户名>! You've successfully authenticated, but GitHub does not provide shell access.

而不是

git@github.com: Permission denied (publickey).

证明我们的 SSH Key 配置成功,可以用这个 Key 来访问 GitHub 上的仓库了!

在 GitHub 上新建远程仓库 ​

  1. 登录后,点击页面右上角的 + 号,选择 New repository。

  1. 填写仓库信息:

    • Repository name(仓库名称):填入与本地文件夹一致的名称(例如 first-repo)。
    • Description(可选描述):简单写一句项目介绍。
    • Public / Private(公开/私有):初学者建议选择 Public(所有人可见)。
    • 不要 勾选 Add a README file、.gitignore 或 Choose a license(因为我们本地已经创建过文件了,保持远端完全空白)。
  2. 点击底部的绿色按钮 Create repository。

连接本地仓库与远程仓库 ​

创建成功后,GitHub 会展示一个页面,其中包含了关键的命令指南:

我们想要把本地的仓库推送到 GitHub 上,请在 Git Bash 中依次进行:

关联远程仓库地址 ​

因为我们刚刚已经配置好了 SSH 密钥,这里直接使用 SSH 协议——Git 会自动用你的密钥完成身份验证,无需输入密码。执行:

sh
git remote add origin git@github.com:你的用户名/你的仓库名.git

添加远程仓库地址。

重命名默认分支为 main ​

sh
git branch -M main

推送至远程 ​

sh
git push -u origin main

-u(即 --set-upstream)表示"建立关联":它让本地的 main 分支记住对应的远程分支。这样以后修改完代码,直接运行 git push 即可,不需要再写 origin main。如果输出:

Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 248 bytes | 248.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To github.com:用户名/仓库.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

说明你的第一个仓库已经推送到了 GitHub 上了!

GitHub 常用操作 ​

克隆与拉取 ​

看教程、复制别人的开源项目时,git clone 可以把远程仓库完整下载到本地:

sh
git clone git@github.com:用户名/仓库名.git

git pull 则会把远程仓库的最新改动同步到本地(多人协作时,动手前先 pull 一下是好习惯):

sh
git pull

Star 与 Explore ​

打开任意项目主页,右上角的 Star 按钮相当于"收藏 + 点赞"。给喜欢的项目点亮星标后,它们会出现在你的个人主页,方便日后回看。

想发现优质项目,可以逛逛 GitHub 顶部的 Explore 页面和 Trending,看看最近大家都在研究什么,是新生学习代码的好入口。

Fork 与 Pull Request ​

Fork 会把别人的仓库完整复制到你的 GitHub 账号下,之后你可以像操作自己的仓库一样修改它。通常的流程是:先 Fork,再 git clone 到本地修改,最后 git push 推回你自己账号下的副本。

如果想让原作者采纳你的改动,就点击仓库页面的 New Pull Request 发起一个 Pull Request,请求对方把你的改动合并进原项目。这也是"参与开源"的完整链路:

Fork → Clone → 修改 → Push → Pull Request

Issue ​

Issue 是项目的“意见箱”:报告 bug、提问、提需求都可以在 Issues 页面发起。对新手来说,从给开源项目提 Issue 开始交流,比直接上手改代码更友好。

Release ​

很多项目会在 Release 页面提供正式的发布包(比如某个软件的安装程序)。比起克隆源码自己构建,直接从这里下载通常更方便。

GitHub Pages ​

GitHub 可以为仓库生成一个免费的静态网站。把 HTML 页面推送到仓库的指定分支后,在仓库的 Settings → Pages 里开启即可。很多人的个人主页、项目介绍页就是这么做的。

撤销与回滚 ​

写代码哪有不犯错的。Git 最大的好处之一就是:改坏了,总有办法回得去。下面按"错误的严重程度"从轻到重,介绍三种最常用的撤销方法。

场景一:文件改坏了,但还没 git add ​

此时文件只在工作区里,改动还没被"拍照"。用 git restore 把文件恢复到上一次提交时的样子,丢弃全部未暂存的修改:

sh
git restore README.md

运行后再 git status,你会发现改动消失了,一切就像什么都没发生一样。

场景二:git add 加错文件了,但还没 git commit ​

文件已经进了暂存区,但还没有提交。用 git restore --staged 把它从暂存区移出去,文件内容不会被改动:

sh
git restore --staged README.md

场景三:已经 git commit 了,想回到某个旧版本 ​

这要分两种情况处理,区别在于提交有没有推送(push)到 GitHub。

情况 A:还没推送到远程仓库,可以用 git reset 把提交历史"倒回去"。HEAD~1 表示"当前提交的前一个提交":

sh
git reset --hard HEAD~1

运行后,最新这条提交会被删除,文件也恢复到它之前的内容。

情况 B:已经推送到 GitHub,请改用 git revert。它不会删除历史,而是新增一条"反向"的提交来抵消之前的改动。这样改动是向前叠加的,对参与协作的每个人都是安全的:

sh
git revert HEAD

命令执行后会打开编辑器让你确认提交说明,保存关闭后撤销即完成,最后 git push 推上去即可。

注意事项 ​

.gitignore 与安全提醒 ​

有些文件不应该被提交到仓库,比如密码、密钥、包含私人信息的配置文件(如 token.txt、.env)。你可以创建一个名为 .gitignore 的文本文件,把不想跟踪的文件或文件夹写进去(每行一个规则):

token.txt
.env

之后运行 git add . 时会自动跳过它们。除了直接写文件名,.gitignore 还支持通配符、目录和取反规则:

# 忽略所有以 .log 结尾的文件
*.log

# 忽略整个文件夹
node_modules/

# 只忽略项目根目录下的 secret.txt(子目录里的同名文件不受影响)
/secret.txt

# 用 ! 取反,重新允许某个文件(需要先有匹配它的忽略规则)
!keep.log

不要提交大文件 ​

Git 擅长管理文本文件,但不适合存放大型二进制文件(视频、安装包、数据集、模型权重等)。这类文件一旦提交进历史,仓库体积会迅速膨胀,导致 clone、pull、push 都变得很慢,而且删除后依然会残留在历史记录里。

如果确实需要分享大文件,可以:

  • 用云盘、网盘分享,或使用 Git 的 LFS(Large File Storage) 扩展;
  • 或者干脆把大文件放在仓库外的路径,用 .gitignore 忽略掉。

提交前检查改动 ​

提交前养成先看一眼"我到底改了什么"的习惯,可以避免把不该提交的文件一起提交进去。运行:

sh
git status

查看有哪些文件被改动,再用 git diff 查看文件的具体改动内容:

sh
git diff

确认无误后再 git add、git commit。这样提交历史才会干净、可读,日后回看时也能快速定位。

下一步 ​

到这里你已经能独立完成"本地提交 → 云端备份"的完整流程。

本文所介绍的 Git 功能只是冰山一角。多人协作常用的分支功能和处理冲突等知识并未提及。需要更深入的学习时,可以参考以下资料:

附录:常用命令速查表 ​

命令作用
git init在当前文件夹初始化一个仓库
git status查看当前仓库状态(哪些文件被改动)
git add <文件>把文件放入暂存区
git add .把所有改动放入暂存区
git commit -m "说明"提交暂存区内容并附上说明
git log查看提交历史
git log --oneline查看提交历史(每条只占一行)
git diff查看工作区里未暂存的具体改动
git restore <文件>丢弃工作区的改动,恢复该文件
git restore --staged <文件>把文件从暂存区移出(不改动内容)
git reset --hard <版本>回退到指定版本,丢弃之后的提交与改动(仅限未推送的本地提交)
git revert <版本>新增一条反向提交来撤销改动(适合已推送的提交)
git push推送本地提交到远程仓库
git push --force强制推送,用本地历史覆盖远端(慎用)
git pull拉取远程仓库的最新改动
git clone <地址>把远程仓库克隆到本地
本页贡献者
在 GitHub 上编辑此页
1 位 提交历史

正在加载评论...

Missing Semester for Artificial Intelligence