🔄 第四章:基本工作流 —— Git 的日常
Git 的三棵树
理解 Git 工作流的关键是理解"三棵树"的概念。想象你是一个厨师,正在准备一道菜:
text
🌳 工作区 (Working Directory) → 你的案板,正在切菜的地方
🌳 暂存区 (Staging Area / Index) → 盘子,准备好的食材放在这里
🌳 仓库 (Repository / HEAD) → 冰箱,已经存好的成品工作流程就是:在案板上修改 → 放到盘子里(add) → 存进冰箱(commit)
git status—— 随时看看发生了什么
这是你用得最多的命令,没有之一。它就像一面镜子,随时告诉你当前的状态。
bash
git status
On branch main
nothing to commit, working tree clean
# 现在修改一下 index.html
echo '<p>欢迎来到我的网站!</p>' >> index.html
git status
On branch main
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: index.html
no changes added to commit (use "git add" to track)📝 备注: 看到了吗?Git 告诉你index.html被修改了,但还没有放到暂存区。状态从绿色变成了黄色(比喻),说明"有东西变了,你还没处理"。
git add—— 把食材放到盘子里
bash
# 添加单个文件
git add index.html
# 添加多个文件
git add index.html style.css app.js
# 添加所有修改(包括新文件和修改的文件)
git add .
# 交互式添加(可以逐行选择要添加的内容)
git add -p💡 提示: git add -p是一个被严重低估的命令!它可以让你逐块(hunk)选择要暂存的修改。比如你改了两个不相关的地方,可以用它只暂存其中一个。这让你的提交历史更加清晰。
git commit—— 存进冰箱
bash
# 标准提交
git commit -m "feat: 添加欢迎语"
# 添加所有已跟踪文件的修改并提交(跳过 add 步骤)
git commit -am "fix: 修复标题错别字"
# 修改上一次提交(没有新改动时)
git commit --amend -m "fix: 修复标题错别字(修正描述)"
# 修改上一次提交(有新改动时)
git add forgotten-file.js
git commit --amend --no-edit⚠️ 注意: git commit -am只能添加已跟踪文件的修改。新创建的文件(untracked)必须先git add。这是新手常踩的坑!
git diff—— 看看改了什么
有时候你改了一堆东西,突然想知道到底改了啥。git diff 就是你的好朋友。
bash
# 查看工作区 vs 暂存区的差异(改了但还没 add 的)
git diff
# 查看暂存区 vs 最后一次提交的差异(add 了但还没 commit 的)
git diff --staged
diff --git a/index.html b/index.html
index 7a8b9c0..d1e2f3a 100644
--- a/index.html
+++ b/index.html
@@ -4,4 +4,5 @@
<title>我的第一个网站</title>
</head>
<body>
<h1>Hello, Git!</h1>
+ <p>欢迎来到我的网站!</p>
</body>
</html>
# 查看两个提交之间的差异
git diff a1b2c3d..f4e5d6c
# 查看某个文件的差异
git diff index.htmlgit log—— 翻看历史
bash
# 基础用法
git log
commit f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3 (HEAD -> main)
Author: 小明 <xiaoming@example.com>
Date: Thu Jun 20 10:30:00 2025 +0800
feat: 添加欢迎语
commit a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
Author: 小明 <xiaoming@example.com>
Date: Thu Jun 20 10:00:00 2025 +0800
feat: 创建首页,Hello Git!
# 单行显示(推荐!更简洁)
git log --oneline
f4e5d6c (HEAD -> main) feat: 添加欢迎语
a1b2c3d feat: 创建首页,Hello Git!
# 带图形的单行显示(看分支必备!)
git log --oneline --graph --all
* f4e5d6c (HEAD -> main) feat: 添加欢迎语
* a1b2c3d feat: 创建首页,Hello Git!
# 查看最近 5 条提交
git log --oneline -5
# 查看某个文件的提交历史
git log --oneline -- index.html
# 搜索提交信息
git log --oneline --grep="feat"💡 提示: 建议设置一个好看的别名:git config --global alias.lg "log --oneline --graph --all --decorate",以后只需要git lg就能看到漂亮的提交历史了。
提交信息的规范
写好提交信息是一门艺术。好的提交信息让你(和你的队友)三个月后还能明白当时改了什么。
text
# 推荐格式(Conventional Commits)
# <类型>: <简短描述>
#
# <详细说明(可选)>
#
# <关联的 issue(可选)>
# 常用类型:
# feat: 新功能
# fix: 修复 bug
# docs: 文档修改
# style: 代码格式(不影响功能)
# refactor: 重构
# test: 测试相关
# chore: 构建/工具相关text
# ❌ 不好的提交信息
git commit -m "改了一些东西"
git commit -m "fix bug"
git commit -m "update"
# ✅ 好的提交信息
git commit -m "fix: 修复登录页面在 Safari 上的样式错位问题"
git commit -m "feat: 添加用户头像上传功能"
git commit -m "refactor: 将数据库连接逻辑抽取为独立模块"