Git 快速入门
7 天互动教程
从零开始,通过终端实操、图解和测验,7 天掌握 Git 版本控制的核心技能。适合大二学生及编程初学者。
Day 1版本控制与 Git
版本控制系统(VCS)是软件开发中不可或缺的工具,它记录文件的每一次变更,让你随时可以回溯历史、协作开发、并行实验。Git 是目前最流行的分布式版本控制系统。
集中式 vs 分布式
安装与首次配置
安装 Git 后,第一件事是设置你的身份信息——每次提交都会记录这些信息:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main
--global 表示全局配置,只需设置一次。项目级配置用 --local(默认),仅对当前仓库生效。
Day 2本地仓库核心操作
本地仓库是 Git 的基础。今天学习创建仓库、追踪文件、提交变更——这是 Git 最核心的工作流程。
创建仓库
mkdir my-project && cd my-project
git init
git init 会在当前目录创建一个 .git 隐藏文件夹,它就是 Git 仓库的核心——存储所有版本数据。此后该目录成为一个 Git 仓库。
追踪与提交
touch README.md # 创建文件
git add README.md # 添加到暂存区
git commit -m "Add README" # 提交到版本库
git status # 查看当前状态
git log --oneline # 查看提交历史
git add 是「拍快照」——把文件当前状态放入暂存区。git commit 是「盖章存档」——把暂存区的快照永久写入版本库。两步分离让你可以精确控制每次提交包含哪些变更。
在下方终端中依次执行以下命令(点击命令可复制到终端):
-
git init— 初始化仓库 -
touch hello.txt— 创建文件 -
git status— 查看状态(hello.txt 是 Untracked) -
git add hello.txt— 暂存文件 -
git status— 再次查看(变为 staged) -
git commit -m "Add hello.txt"— 提交 -
git log --oneline— 查看历史
Day 3三个区域与差异比较
深入理解工作区、暂存区、版本库三个区域,学会用 git diff 查看差异——这是 Git 进阶的关键。
文件的生命周期
git diff 三种用法
git diff # 工作区 vs 暂存区(还没 add 的改动)
git diff --staged # 暂存区 vs 版本库(已 add 还没 commit 的改动)
git diff HEAD # 工作区 vs 版本库(所有未提交的改动)
git diff 的输出格式:@@ -旧行,行数 +新行,行数 @@ 标记差异位置,绿色 + 是新增行,红色 - 是删除行。
先完成 Day 2 的练习,然后继续:
-
echo "Hello Git" > hello.txt— 修改文件内容 -
git diff— 查看工作区改动 -
git add hello.txt— 暂存 -
git diff --staged— 查看已暂存改动 -
echo "Line 2" >> hello.txt— 再次修改 -
git status— 注意:同时有 staged 和 unstaged 改动 -
git add hello.txt— 重新暂存最新内容 -
git commit -m "Update hello.txt"— 提交
Day 4分支管理
分支是 Git 最强大的特性——它让你可以并行开发不同功能而互不干扰。掌握分支是团队协作的基础。
什么是分支
分支本质上是一个指向某次提交的可移动指针。创建分支几乎零成本——只是创建了一个新指针,不复制任何文件。
核心命令
git branch # 查看所有分支
git branch feature # 创建分支(不切换)
git switch feature # 切换到分支(推荐)
git checkout feature # 切换分支(旧写法)
git switch -c feature # 创建并切换(推荐)
git checkout -b feature # 创建并切换(旧写法)
git merge feature # 将 feature 合并到当前分支
git branch -d feature # 删除已合并的分支
合并:快进 vs 三方
合并冲突:当两条分支修改了同一文件的同一区域时,Git 无法自动合并,会提示冲突。你需要手动编辑文件解决冲突(保留需要的部分),然后 git add + git commit。
-
git branch— 查看当前分支 -
git branch feature— 创建分支 -
git switch feature— 切换到 feature -
touch feature.txt— 创建新文件 -
git add feature.txt— 暂存 -
git commit -m "Add feature.txt"— 提交 -
git switch main— 切回主分支 -
git merge feature— 合并 -
git log --oneline— 查看历史
Day 5远程仓库与协作
远程仓库让你和团队共享代码。学习 clone、push、pull、fetch,掌握 GitHub 协作工作流。
本地与远程
核心命令
git clone <url> # 克隆远程仓库到本地
git remote add origin <url> # 关联远程仓库
git remote -v # 查看远程仓库
git push origin main # 推送本地分支到远程
git push -u origin main # 首次推送并设置跟踪
git pull origin main # 拉取并合并 (= fetch + merge)
git fetch origin # 仅拉取,不自动合并
git push # 已设置跟踪时简写
fetch vs pull:git fetch 只下载远程更新但不修改本地分支,安全且可控;git pull = fetch + merge,直接合并到当前分支。建议初学者用 fetch + 手动 merge,更可控。
GitHub 协作工作流
- Fork — 在 GitHub 上 Fork 项目到自己的账号
- Clone —
git clone你的 Fork 到本地 - Branch —
git switch -c fix-bug创建功能分支 - Commit — 修改代码,
git add+git commit - Push —
git push origin fix-bug推送到你的 Fork - PR — 在 GitHub 上发起 Pull Request 请求合并
- Review & Merge — 代码审查通过后合并
本终端模拟了远程仓库,可以练习推送和拉取:
-
git remote add origin https://github.com/me/repo.git— 添加远程 -
git remote -v— 查看远程 -
git push -u origin main— 推送并设置跟踪 -
git pull origin main— 拉取(模拟) -
git fetch origin— 仅获取
Day 6撤销与回退
每个人都会犯错——Git 提供了多种撤销方式。关键是理解每种命令撤销的是什么、影响范围多大。
三种撤销场景
git stash:临时存放
当你在分支 A 工作到一半,需要切换到分支 B 修复 bug,但 A 的改动还没完成不想提交——git stash 把工作区改动"藏"起来,工作区恢复干净。修完 bug 后 git stash pop 取回。
git stash # 暂存当前工作区改动
git stash list # 查看暂存列表
git stash pop # 取出最近一次暂存(并删除栈)
git stash apply # 取出但不删除(可指定 stash@{1})
git stash drop # 删除指定暂存
git reset --hard 和 git checkout -- <file> 会永久丢弃未提交的改动,无法恢复!使用前务必确认。如果误删,git reflog 可能帮你找回(但仅限已提交的)。
-
echo "wrong" > hello.txt— 修改文件 -
git checkout -- hello.txt— 撤销工作区修改 -
echo "staged" > temp.txt— 创建新文件 -
git add temp.txt— 暂存 -
git reset HEAD temp.txt— 取消暂存 -
echo "wip" > work.txt— 创建工作文件 -
git add work.txt— 暂存 -
git stash— 暂存工作 -
git stash pop— 取回 -
git log --oneline— 查看历史
Day 7进阶与最佳实践
最后一天学习 rebase、tag、.gitignore 和提交规范——这些技能让你从"会用 Git"升级到"用好 Git"。
git rebase:变基
rebase 将你的分支提交"搬到"另一个分支的最新提交之上,保持线性历史。与 merge 的区别:
git tag:版本标记
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "Release" # 附注标签(推荐)
git tag # 列出所有标签
git push origin v1.0.0 # 推送单个标签
git push --tags # 推送所有标签
.gitignore:忽略文件
编译产物、依赖包、IDE 配置等不应纳入版本控制。创建 .gitignore 文件指定忽略规则:
# 依赖
node_modules/
vendor/
# 编译产物
dist/
build/
*.o
*.class
# IDE
.idea/
.vscode/
*.swp
# 系统
.DS_Store
Thumbs.db
# 环境变量
.env
.env.local
提交信息规范(Conventional Commits):type(scope): description,如 feat(auth): add login page、fix(api): handle null response、docs: update README。类型包括 feat / fix / docs / style / refactor / test / chore。
-
git tag -a v1.0 -m "First release"— 创建标签 -
git tag— 查看标签 -
touch .gitignore— 创建忽略文件 -
echo "node_modules/" > .gitignore— 写入规则 -
git add .gitignore— 暂存 -
git commit -m "chore: add .gitignore"— 提交 -
git log --oneline— 查看完整历史
📋 命令速查表
日常开发中最常用的 Git 命令,按功能分类。输入关键词可筛选。
配置
创建仓库
基础操作
分支
远程
撤销
标签
进阶
恭喜完成!
你已经掌握了 Git 的核心概念和操作。继续在实践中积累经验,探索更多高级功能吧!