Skip to content
Chapter 03

本地基础操作

日常开发中 80% 的 Git 操作都在本章:创建仓库、暂存、提交、查看历史、撤销修改、暂存工作。

创建仓库与状态查看

怎么创建一个新仓库?git init 和 git clone 的区别是什么?

两种方式:

git init — 在当前目录创建一个全新的空仓库。适合从零开始的项目。

git clone <url> — 从远程服务器克隆一个已有仓库到本地,包含完整历史。

git init my-project        # 创建新目录并初始化
git clone https://github.com/user/repo.git  # 克隆远程仓库
区别
init 创建的是空仓库(没有任何提交),clone 拷贝的是完整历史。如果你要参与已有项目,用 clone;如果从零开始,用 init。
怎么查看当前仓库的状态?

git status 是最常用的命令,告诉你:

git status
# 显示:
#   - 当前分支名
#   - 有哪些文件被修改了(工作区)
#   - 有哪些文件已暂存(staged)
#   - 有哪些文件未被追踪(untracked)

建议:每次操作前后都跑一次 git status,养成习惯。

创建仓库练习
$

暂存与提交

怎么把文件加入暂存区?git add . 和 git add <file> 的区别?

git add <file> 只暂存指定文件。git add . 暂存当前目录下所有变更。

git add README.md     # 只暂存 README.md
git add .             # 暂存所有变更文件
git add src/          # 暂存 src 目录下的所有变更
注意
git add . 会把所有变更都加进去,包括你可能不想提交的文件。建议配合 .gitignore 使用。
怎么提交?commit message 应该怎么写?

提交就是把暂存区的快照永久记录到仓库历史中:

git commit -m "feat: add user login page"

推荐使用 Conventional Commits 规范:

类型(范围): 简短描述

常用类型:
  feat:     新功能
  fix:      修复 bug
  docs:     文档变更
  refactor: 重构(不是新功能也不是修bug)
  style:    格式调整(不影响逻辑)
  test:     测试相关
  chore:    构建工具/依赖变更
怎么查看提交历史?

git log 查看完整历史,常用选项:

git log                  # 完整日志
git log --oneline        # 每行一个提交(精简)
git log --oneline -5     # 最近 5 条
git log --graph          # ASCII 分支图
git log --author="张三"   # 按作者筛选
git log -p -- README.md  # 查看某文件的历史变更
怎么查看文件的修改内容?

git diff 查看具体的代码变更:

git diff              # 工作区 vs 暂存区(未暂存的修改)
git diff --staged     # 暂存区 vs 最新提交(已暂存的修改)
git diff HEAD         # 工作区 vs 最新提交(所有修改)
git diff commit1 commit2  # 两个提交之间的差异

撤销操作

怎么撤销工作区的修改?

文件改坏了想恢复到上次提交的状态:

git restore <file>           # 推荐(Git 2.23+)
git checkout -- <file>      # 传统写法(效果相同)
警告
这会丢弃工作区中未暂存的修改,且无法恢复!确认不需要这些修改后再执行。
怎么撤销暂存(取消 git add)?

文件已 git add 但想从暂存区移除:

git restore --staged <file>   # 推荐(Git 2.23+)
git reset HEAD <file>         # 传统写法

文件内容不会变,只是从"已暂存"变回"未暂存"状态。

撤销操作练习
仓库已初始化,包含 2 个已提交文件:app.js, config.json
$
怎么删除文件?git rm 和手动删除有什么区别?

手动删除文件后,还需要 git add 来暂存删除操作。git rm 一步到位:

git rm <file>          # 删除文件 + 自动暂存
rm <file>             # 只删除文件,还需 git add
git rm --cached <file>  # 从仓库中移除,但保留本地文件

git rm --cached 适合把误提交的文件从仓库中移除但保留本地副本。

怎么重命名文件?Git 能追踪到重命名吗?

git mv old new 等价于 mv + git add。Git 通过内容相似度检测来识别重命名:

git mv old_name.txt new_name.txt

用 git log --follow 可以追踪重命名前的历史。

怎么查看某次提交的详细内容?

git show 查看某次提交的完整变更:

git show              # 查看最新提交
git show abc1234      # 查看指定提交
git show --stat       # 只看文件列表和统计

标签与暂存

怎么给重要提交打标签?

标签用于标记重要节点(如版本发布):

git tag v1.0.0                      # 轻量标签
git tag -a v1.0.0 -m "正式发布1.0"  # 附注标签(推荐)
git tag                             # 查看所有标签
git show v1.0.0                     # 查看标签详情

轻量标签只是一个指针,附注标签包含作者、日期、消息等完整信息。

git stash 是什么?什么时候用?怎么恢复?

git stash 临时保存未提交的修改,让工作区回到干净状态。典型场景:

# 正在开发功能,突然需要切换分支修 bug:
git stash                     # 暂存当前修改
git switch hotfix-branch      # 切换去修 bug
# ... 修完 bug 后切回来
git stash pop                 # 恢复之前的修改
git stash list                # 查看所有暂存
git stash pop                 # 恢复并删除最近的暂存
git stash apply               # 恢复但保留暂存记录
git stash drop                # 删除暂存记录
标签与 stash 练习
仓库已有 2 次提交,尝试打标签和使用 stash
$