返回首页

GitGitHub
完整入门教程

从零开始掌握版本控制——理解核心概念、学会基础操作、掌握团队协作

如果你曾经写过论文、做过方案、写过代码,大概率经历过这样的场景:

📄 报告_v1.docx
📄 报告_v2.docx
📄 报告_v2_修改版.docx
📄 报告_v2_修改版_最终版.docx
📄 报告_最终版_真的最终版.docx

你知道这种方式很蠢,但你不知道更好的方案。

Git 就是那个更好的方案。它是一套版本控制系统,帮你精确地记录每一次修改:谁改的、改了什么、为什么改。而 GitHub 是基于 Git 的在线协作平台,让你可以把代码存在云端,和全世界的人一起协作。

这篇文章从零开始,带你理解 Git 的核心概念,学会 GitHub 的基本操作,最终能够独立管理自己的项目。

Part 1

理解 Git

Git 是什么

Git 是一个分布式版本控制系统(Distributed Version Control System)。这个名字很长,我们拆开理解:

版本控制
自动帮你管理文件的每一个历史版本。你不再需要手动复制文件、手动命名"v1""v2",Git 会帮你记录每一次变更的完整快照。
🔗
分布式
每个人的电脑上都有项目的完整历史记录。即使服务器挂了,任何一个人的电脑上都有完整的备份。

Git 由 Linus Torvalds 在 2005 年创建,就是创建 Linux 操作系统的那个人。他当时需要一个工具来管理 Linux 内核的开发,市面上的工具都不满意,于是自己写了一个。如今 Git 已经成为软件开发领域的标准工具,几乎所有的开源项目和商业项目都在使用它。

为什么要学 Git

即使你不是程序员,Git 也值得学,理由有三:

  1. 不再丢失任何工作成果。 Git 记录了项目的完整历史,你随时可以回到任何一个历史版本。误删了一段代码?改错了一个文件?执行一条命令就能恢复。
  2. 多人协作不再混乱。 没有 Git 的时候,团队协作靠的是"我改完了发给你,你改完了再发给我"。Git 让每个人可以独立工作,最后把各自的成果智能合并。
  3. 它是进入技术世界的基础设施。 如果你想参与任何开源项目、想在技术公司工作、想和开发者协作,Git 是必备技能,就像文字工作者必须会用 Word 一样。

Git 的核心概念

Git 的设计有一套精密的概念体系,理解这些概念后,所有的命令都只是实现手段。

仓库(Repository)

一个 Git 仓库就是一个被 Git 管理的文件夹。当你在一个文件夹里执行 git init 命令后,这个文件夹就变成了一个 Git 仓库。Git 会在其中创建一个隐藏的 .git 目录,用来存储所有的版本历史。

提交(Commit)

提交是 Git 中最核心的概念。每一次提交就是一次快照——它记录了在那个时间点,所有被追踪文件的状态。你可以把它想象成游戏中的"存档":随时可以保存进度,也随时可以读取任何一个存档。

C1 初始化项目 a1b2c3d C2 添加首页 d4e5f6g C3 修复样式 h7i8j9k C4 添加登录 C5 当前版本 HEAD 每个提交包含: • 文件变更内容 • 提交者和时间 • 提交说明信息
提交历史形成一条时间线,每个节点是一个快照,HEAD 指向当前版本

暂存区(Staging Area)

Git 有一个独特的设计:修改文件后,这些修改不会自动被记录。你需要先把修改"暂存"起来,然后再统一提交。

为什么要多这一步?因为你一次可能修改了很多文件,但这些修改可能属于不同的逻辑。暂存区让你可以精确控制每次提交包含哪些修改,保持每个提交都有清晰的目的。

📂 工作区
Working Directory
你正在编辑的文件
git add
📋 暂存区
Staging Area
准备好要提交的修改
git commit
🗄️ 版本库
Repository
安全保存的历史记录
💡 类比

搬家时,你从各个房间收集物品放到打包区(git add),整理好后再封箱发走(git commit)。每个箱子里的东西应该是同一类的,而不是把厨房用品和书籍混在一起。

所以,Git 中的文件有三种状态:

分支(Branch)

分支是 Git 最强大的功能之一。想象你正在写一篇文章,写到一半时突然有一个新的想法,但你不确定这个想法行不行。你可以创建一个分支,在分支上实验,如果成功了就合并回来,如果失败了就丢弃这个分支,原来的内容不受任何影响。

C1 C2 C3 C4 C5 C6 merge C7 main feature 创建分支 合并分支 git checkout -b feature git merge feature
分支让你可以在独立的线路上实验,成功了再合并回主线

真实的分支操作在终端中是这样的:

Terminal — branch & merge
git checkout -b feature-new-idea Switched to a new branch 'feature-new-idea' echo "这是一个实验性的想法" > experiment.txt git add experiment.txt git commit -m "添加实验性内容" [feature-new-idea f8e8eb5] 添加实验性内容 1 file changed, 1 insertion(+) create mode 100644 experiment.txt git checkout master Switched to branch 'master' git merge feature-new-idea Updating 6bf52f9..f8e8eb5 Fast-forward experiment.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 experiment.txt

在团队协作中,分支的作用更加明显。每个人可以在自己的分支上独立开发不同的功能,互不干扰。开发完成后,再把各自的分支合并到主线上。默认的主分支通常叫做 main(或 master),它代表项目的正式版本。

Part 2

安装和配置 Git

安装 Git

🍎 macOS
打开终端输入 git --version,如果没有安装会提示安装 Xcode Command Line Tools。也可以用 brew install git
🪟 Windows
访问 git-scm.com 下载安装包,所有选项保持默认。安装后用"Git Bash"执行命令。
🐧 Linux
以 Ubuntu 为例:sudo apt update && sudo apt install git

初始配置

安装完成后,你需要告诉 Git 你是谁。这些信息会出现在你的每一次提交中。

$ git config --global user.name "你的名字"
$ git config --global user.email "你的邮箱"
💡 提示

邮箱建议使用你 GitHub 账号绑定的邮箱,这样提交记录才能正确关联到你的 GitHub 账号。

Part 3

Git 基础操作

创建你的第一个仓库

$ mkdir my-first-repo
$ cd my-first-repo
$ git init
Initialized empty Git repository in /path/to/my-first-repo/.git/

第一次提交

创建一个文件,然后用 git status 查看仓库状态:

Terminal — git status
echo "Hello, Git!" > hello.txt git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) hello.txt nothing added to commit but untracked files present (use "git add" to track)

Git 告诉你有一个未追踪的新文件 hello.txt(红色表示尚未暂存)。将它添加到暂存区并提交:

Terminal — git add & commit
git add hello.txt git commit -m "添加 hello.txt 文件" [master (root-commit) b5f4ab1] 添加 hello.txt 文件 1 file changed, 1 insertion(+) create mode 100644 hello.txt

-m 后面的引号里是提交信息,用来说明这次提交做了什么。写清楚提交信息是一个好习惯——当你几个月后回来翻历史的时候,清晰的提交信息能帮你快速理解每次改动的目的。

常用命令速查

命令作用
git status查看当前仓库状态(哪些文件被修改、暂存等)
git add 文件名将指定文件的修改添加到暂存区
git add .将所有修改添加到暂存区
git commit -m "信息"将暂存区的内容提交,附带说明信息
git log --oneline查看简洁的提交历史(每个提交一行)
git diff查看已修改但未暂存的变更内容
git checkout -- 文件名撤销对某个文件的修改(恢复到上次提交的状态)

完整走一遍日常流程:修改文件 → 查看变更 → 暂存 → 提交 → 查看历史。

Terminal — git diff
echo "这是第二行内容" >> hello.txt git diff diff --git a/hello.txt b/hello.txt index 670a245..1ad5294 100644 --- a/hello.txt +++ b/hello.txt @@ -1 +1,2 @@ Hello, Git! +这是第二行内容

绿色的 + 表示新增的行。现在暂存、提交,然后查看历史:

Terminal — git log
git add hello.txt git commit -m "在 hello.txt 中添加第二行内容" [master 6bf52f9] 在 hello.txt 中添加第二行内容 1 file changed, 1 insertion(+) git log --oneline 6bf52f9 在 hello.txt 中添加第二行内容 b5f4ab1 添加 hello.txt 文件

每条提交记录前面的 6bf52f9 是这个提交的唯一哈希标识。

分支操作

// 创建并切换到新分支
$ git checkout -b feature-new-idea
// 在新分支上做修改并提交
$ echo "这是一个实验性的想法" > experiment.txt
$ git add experiment.txt
$ git commit -m "添加实验性内容"
// 切换回主分支——experiment.txt 会消失
$ git checkout main
// 满意的话,合并分支
$ git merge feature-new-idea
Part 4

理解 GitHub

GitHub 是什么

Git 是一个本地工具,它在你自己的电脑上运行。GitHub 是一个基于 Git 的在线平台,提供了三个核心价值:

🖥️ Git(本地)
  • 在你自己的电脑上运行
  • 管理版本历史
  • 创建和合并分支
  • 好比笔和纸
+
☁️ GitHub(云端)
  • 云端备份,永不丢失
  • 多人协作与代码审查
  • 全球最大开源社区
  • 好比图书馆
Part 5

GitHub 实战操作

将本地仓库推送到 GitHub

在 GitHub 上创建新仓库后,在本地执行:

$ git remote add origin https://github.com/你的用户名/my-first-repo.git
$ git branch -M main
$ git push -u origin main

推送(Push)与拉取(Pull)

🖥️ 本地仓库 你的电脑 C1 C2 C3 ☁️ GitHub github.com C1 C2 push pull
push 将本地新提交推送到远程,pull 将远程新提交拉取到本地

一个好的工作习惯是:每天开始工作前先 git pull,确保你的本地代码是最新的。

Part 6

GitHub 协作功能

📋
Issue
任务与问题追踪。报告 Bug、提出功能建议、记录待办事项。可打标签、指派、关联里程碑。
🔀
Pull Request
代码审查与合并的核心流程。创建分支 → 提交 → 发起 PR → 审查 → 合并。
🍴
Fork
参与别人的开源项目。复制一份到自己账号下,修改后通过 PR 贡献给原项目。

Pull Request 完整流程

1
创建分支
git checkout -b feature-login — 在独立分支上开发
2
编写代码并提交
在分支上做修改,每次提交聚焦一个目的
3
推送并发起 PR
git push -u origin feature-login → 在 GitHub 上创建 Pull Request
4
代码审查
团队成员查看代码改动,留下评论和建议
5
合并到主分支 ✓
审查通过后,点击 Merge 将分支合并到 main
Part 7

.gitignore 和 README

🚫 .gitignore
告诉 Git 忽略哪些文件,避免提交不该提交的内容
# 依赖目录
node_modules/
# 敏感信息
.env
# 系统文件
.DS_Store
📖 README.md
项目的说明书和门面,别人看到的第一个文件
# 项目名称
简要介绍这个项目做什么
## 安装方法
npm install
Part 8

常见问题和实用技巧

提交信息怎么写

✓ 好的提交信息

"添加用户登录功能" · "修复首页加载异常" · "重构数据库连接逻辑"

✗ 糟糕的提交信息

update · fix bug · 修改了一下 — 三个月后你看到会一脸茫然

解决合并冲突

当两个人修改了同一个文件的同一个位置时,Git 无法自动决定保留哪个版本,这时就会产生合并冲突。冲突的文件中会出现类似这样的标记:

<<<<<<< HEAD
你的修改内容
=======
对方的修改内容
>>>>>>> feature-branch

解决方法:打开冲突文件,决定保留哪些内容,删除冲突标记,然后执行 git addgit commit。冲突是正常现象,不需要害怕。

GitHub 上的实用功能

📄 GitHub Pages
把仓库中的 HTML 文件发布为网站,适合个人博客、项目文档。免费。
⚙️ GitHub Actions
自动化工具。比如"每次提交代码时自动运行测试",这是持续集成的基础。
⭐ Star 和 Watch
Star 相当于收藏,Watch 相当于订阅。给喜欢的项目加 Star 是一种社区认可。
Part 9

学习路径建议

学 Git 和学任何工具一样,关键在于用。以下是一个建议的学习路径:

第一周
建立基本操作的肌肉记忆
每天做一个小练习:创建仓库,写几个文件,提交几次,看看 log。目标是让 git add、git commit、git status、git log 变成条件反射。
第二周
在 GitHub 上实践
创建一个真实的项目推送到 GitHub。可以是你的学习笔记、个人博客、或者一个小工具。让你的 GitHub 主页不再是空白的。
第三周
学习分支和协作
练习创建分支、合并分支。找一个朋友互相给对方的仓库提 PR,体验完整的协作流程。
持续
参与开源项目
在 GitHub 上找你感兴趣的项目,从修复文档中的错别字开始,逐步参与更深层次的贡献。这是最快速的成长路径。
Appendix

完整命令速查表

场景命令
git init初始化仓库
git clone <url>克隆远程仓库到本地
git status查看当前状态
git add .暂存所有修改
git commit -m "msg"提交暂存的修改
git log --oneline查看简洁的提交历史
git diff查看未暂存的变更
git checkout -b <name>创建并切换到新分支
git merge <branch>合并指定分支到当前分支
git push推送到远程仓库
git pull从远程拉取最新代码
git checkout -- <file>撤销文件修改
git reset HEAD <file>撤销暂存
git reset --soft HEAD~1撤销最近一次提交(保留修改)

Git 和 GitHub 的功能远不止于此,但掌握以上内容已经足以应对日常使用。工具的价值在于解决问题,当你在实际项目中遇到新的需求时,再查阅对应的高级功能,效果远好过一次性死记所有命令。