如果你曾经写过论文、做过方案、写过代码,大概率经历过这样的场景:
你知道这种方式很蠢,但你不知道更好的方案。
Git 就是那个更好的方案。它是一套版本控制系统,帮你精确地记录每一次修改:谁改的、改了什么、为什么改。而 GitHub 是基于 Git 的在线协作平台,让你可以把代码存在云端,和全世界的人一起协作。
这篇文章从零开始,带你理解 Git 的核心概念,学会 GitHub 的基本操作,最终能够独立管理自己的项目。
理解 Git
Git 是什么
Git 是一个分布式版本控制系统(Distributed Version Control System)。这个名字很长,我们拆开理解:
Git 由 Linus Torvalds 在 2005 年创建,就是创建 Linux 操作系统的那个人。他当时需要一个工具来管理 Linux 内核的开发,市面上的工具都不满意,于是自己写了一个。如今 Git 已经成为软件开发领域的标准工具,几乎所有的开源项目和商业项目都在使用它。
为什么要学 Git
即使你不是程序员,Git 也值得学,理由有三:
- 不再丢失任何工作成果。 Git 记录了项目的完整历史,你随时可以回到任何一个历史版本。误删了一段代码?改错了一个文件?执行一条命令就能恢复。
- 多人协作不再混乱。 没有 Git 的时候,团队协作靠的是"我改完了发给你,你改完了再发给我"。Git 让每个人可以独立工作,最后把各自的成果智能合并。
- 它是进入技术世界的基础设施。 如果你想参与任何开源项目、想在技术公司工作、想和开发者协作,Git 是必备技能,就像文字工作者必须会用 Word 一样。
Git 的核心概念
Git 的设计有一套精密的概念体系,理解这些概念后,所有的命令都只是实现手段。
仓库(Repository)
一个 Git 仓库就是一个被 Git 管理的文件夹。当你在一个文件夹里执行 git init 命令后,这个文件夹就变成了一个 Git 仓库。Git 会在其中创建一个隐藏的 .git 目录,用来存储所有的版本历史。
提交(Commit)
提交是 Git 中最核心的概念。每一次提交就是一次快照——它记录了在那个时间点,所有被追踪文件的状态。你可以把它想象成游戏中的"存档":随时可以保存进度,也随时可以读取任何一个存档。
暂存区(Staging Area)
Git 有一个独特的设计:修改文件后,这些修改不会自动被记录。你需要先把修改"暂存"起来,然后再统一提交。
为什么要多这一步?因为你一次可能修改了很多文件,但这些修改可能属于不同的逻辑。暂存区让你可以精确控制每次提交包含哪些修改,保持每个提交都有清晰的目的。
你正在编辑的文件
准备好要提交的修改
安全保存的历史记录
搬家时,你从各个房间收集物品放到打包区(git add),整理好后再封箱发走(git commit)。每个箱子里的东西应该是同一类的,而不是把厨房用品和书籍混在一起。
所以,Git 中的文件有三种状态:
- 已修改(Modified)——文件被改了,但还没暂存
- 已暂存(Staged)——文件的修改已被标记,等待下一次提交
- 已提交(Committed)——文件的修改已被安全地记录到版本历史中
分支(Branch)
分支是 Git 最强大的功能之一。想象你正在写一篇文章,写到一半时突然有一个新的想法,但你不确定这个想法行不行。你可以创建一个分支,在分支上实验,如果成功了就合并回来,如果失败了就丢弃这个分支,原来的内容不受任何影响。
真实的分支操作在终端中是这样的:
在团队协作中,分支的作用更加明显。每个人可以在自己的分支上独立开发不同的功能,互不干扰。开发完成后,再把各自的分支合并到主线上。默认的主分支通常叫做 main(或 master),它代表项目的正式版本。
安装和配置 Git
安装 Git
git --version,如果没有安装会提示安装 Xcode Command Line Tools。也可以用 brew install git。sudo apt update && sudo apt install git初始配置
安装完成后,你需要告诉 Git 你是谁。这些信息会出现在你的每一次提交中。
邮箱建议使用你 GitHub 账号绑定的邮箱,这样提交记录才能正确关联到你的 GitHub 账号。
Git 基础操作
创建你的第一个仓库
第一次提交
创建一个文件,然后用 git status 查看仓库状态:
Git 告诉你有一个未追踪的新文件 hello.txt(红色表示尚未暂存)。将它添加到暂存区并提交:
-m 后面的引号里是提交信息,用来说明这次提交做了什么。写清楚提交信息是一个好习惯——当你几个月后回来翻历史的时候,清晰的提交信息能帮你快速理解每次改动的目的。
常用命令速查
| 命令 | 作用 |
|---|---|
| git status | 查看当前仓库状态(哪些文件被修改、暂存等) |
| git add 文件名 | 将指定文件的修改添加到暂存区 |
| git add . | 将所有修改添加到暂存区 |
| git commit -m "信息" | 将暂存区的内容提交,附带说明信息 |
| git log --oneline | 查看简洁的提交历史(每个提交一行) |
| git diff | 查看已修改但未暂存的变更内容 |
| git checkout -- 文件名 | 撤销对某个文件的修改(恢复到上次提交的状态) |
完整走一遍日常流程:修改文件 → 查看变更 → 暂存 → 提交 → 查看历史。
绿色的 + 表示新增的行。现在暂存、提交,然后查看历史:
每条提交记录前面的 6bf52f9 是这个提交的唯一哈希标识。
分支操作
理解 GitHub
GitHub 是什么
Git 是一个本地工具,它在你自己的电脑上运行。GitHub 是一个基于 Git 的在线平台,提供了三个核心价值:
- ✓ 在你自己的电脑上运行
- ✓ 管理版本历史
- ✓ 创建和合并分支
- ✓ 好比笔和纸
- ✦ 云端备份,永不丢失
- ✦ 多人协作与代码审查
- ✦ 全球最大开源社区
- ✦ 好比图书馆
GitHub 实战操作
将本地仓库推送到 GitHub
在 GitHub 上创建新仓库后,在本地执行:
推送(Push)与拉取(Pull)
一个好的工作习惯是:每天开始工作前先 git pull,确保你的本地代码是最新的。
GitHub 协作功能
Pull Request 完整流程
git checkout -b feature-login — 在独立分支上开发git push -u origin feature-login → 在 GitHub 上创建 Pull Request.gitignore 和 README
常见问题和实用技巧
提交信息怎么写
"添加用户登录功能" · "修复首页加载异常" · "重构数据库连接逻辑"
update · fix bug · 修改了一下 — 三个月后你看到会一脸茫然
解决合并冲突
当两个人修改了同一个文件的同一个位置时,Git 无法自动决定保留哪个版本,这时就会产生合并冲突。冲突的文件中会出现类似这样的标记:
解决方法:打开冲突文件,决定保留哪些内容,删除冲突标记,然后执行 git add 和 git commit。冲突是正常现象,不需要害怕。
GitHub 上的实用功能
学习路径建议
学 Git 和学任何工具一样,关键在于用。以下是一个建议的学习路径:
完整命令速查表
| 场景 | 命令 |
|---|---|
| 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 的功能远不止于此,但掌握以上内容已经足以应对日常使用。工具的价值在于解决问题,当你在实际项目中遇到新的需求时,再查阅对应的高级功能,效果远好过一次性死记所有命令。