Git 基础命令 — init / clone / add / commit / status

环境配好后,这一章讲 Git 最核心的日常操作:建仓库、加文件、提交、看状态。掌握这五个命令,你就完成了"版本控制"最基本的能力——把改动存进历史。后面所有的分支、合并、协作,都建立在这个循环之上。

1. git init — 创建新仓库

把一个普通文件夹变成 Git 仓库,只需要一条命令:

# 把一个普通文件夹变成 Git 仓库
mkdir my-project && cd my-project
git init                      # 在当前目录生成 .git/

# .git 是个隐藏目录,藏着 Git 的全部数据
# 删掉它 = 删库!千万别动
ls -la                        # 能看到 .git 目录

# 初始化后,Git 会提示:
# Initialized empty Git repository in /Users/you/my-project/.git/

# 如果想换默认分支名(老版本默认 master)
git init -b main              # 直接以 main 作为初始分支

git init 会在当前目录生成一个隐藏目录 .git,里面藏着 Git 的全部数据(对象库、引用、配置)。这个目录是仓库的"灵魂",删掉它就等于删库。日常你完全不需要碰它,Git 会自己管理。

2. git clone — 克隆已有仓库

更多时候你不是从零建仓库,而是把别人(或自己)在 GitHub 上的项目下载到本地。这就用 git clone:

# 克隆:把远程仓库整个下载到本地(含全部历史)
git clone https://github.com/vuejs/vue.git
# 会在当前目录创建 vue/ 子目录

# 克隆到指定目录名
git clone https://github.com/vuejs/vue.git my-vue

# 用 SSH 地址(免密,推荐配好 SSH 后用)
git clone git@github.com:vuejs/vue.git

# 只克隆最近一次提交(大仓库省时间/流量)
git clone --depth 1 https://github.com/torvalds/linux.git

# 克隆指定分支
git clone -b dev https://github.com/you/repo.git

克隆会做四件事:下载全部历史、检出最新代码到工作区、自动关联远程(origin)、自动建立本地分支。克隆完立刻就能开发,不需要再 init。

3. git add — 加入暂存区

回顾上一篇讲的三个区域:工作区 → 暂存区 → 仓库。git add 是第一步,把工作区的改动"标记为待提交"。

# 三步循环:工作区 → 暂存区 → 仓库

# 1. 在工作区新建/修改文件
echo "# 我的笔记" > README.md
echo "print('hi')" > hello.py

# 2. 加入暂存区(staging)
git add README.md             # 只暂存这一个文件
git add hello.py              # 再暂存一个
git add .                     # 暂存当前目录所有改动(最常用)
git add -A                    # 暂存整个仓库所有改动(含删除)
git add -p                    # 交互式选择"哪几行"暂存(精细控制)

# 3. 写入仓库(永久历史)
git commit -m "feat: 初始化项目,添加 README 和 hello"

# -m 后面是提交信息;不带 -m 会打开编辑器写多行信息
git commit                    # 打开编辑器写详细的 commit message

为什么要暂存?因为很多时候你改了 5 个文件,只想提交其中 3 个——暂存区让你精细挑选哪些改动进这一次提交,让历史更清晰。最强大的是 git add -p(patch 模式),它会逐块问你"这几行要不要加",适合一个文件里只想提交一部分改动的情况。

4. git commit — 写入历史

暂存区的改动用 git commit "永久写入历史"。一旦 commit,改动就进了 Git 的对象库,只要你不主动删,就永远在。

# Conventional Commits 规范:让历史可读、可自动生成 changelog
# 格式:type(scope): subject
#
# type 常用值:
#   feat     新功能
#   fix      修复 bug
#   docs     文档改动
#   style    格式调整(不影响代码逻辑,如缩进)
#   refactor 重构(既不是新功能也不是修 bug)
#   perf     性能优化
#   test     增删测试
#   chore    构建工具、依赖等杂项
#   revert   撤销某次提交
#
# 示例:
git commit -m "feat(login): 添加手机号验证码登录"
git commit -m "fix(cart): 修复数量为负的空指针异常"
git commit -m "docs: 更新 README 安装步骤"
git commit -m "refactor(auth): 抽取 token 校验逻辑到中间件"

# 多行 message:用多个 -m,每段是一段
git commit -m "feat: 添加用户头像上传" -m "支持 jpg/png,最大 2MB,压缩到 200x200"

commit message 是给未来的自己和同事看的。"修改 bug"是废话,"fix: 登录页空指针异常"才有用。团队常遵循 Conventional Commits 规范,用 feat/fix/docs 等前缀分类,这样能自动生成 changelog、自动判断版本号怎么升。

5. git status — 查看状态

这是你最常敲的命令——随时知道"现在仓库处于什么状态":哪些文件改了、哪些进了暂存区、当前在哪个分支。

# git status 是你最常敲的命令,看当前仓库状态
git status

# 典型输出(有改动还没 add):
# On branch main
# Changes not staged for commit:
#   modified:   hello.py      # 已修改但未暂存(红色)
#
# Untracked files:
#   README.md                 # 新文件,Git 还没追踪(红色)

# add 之后再看:
git add .
git status
# Changes to be committed:    # 已暂存,等待 commit(绿色)
#   new file:   README.md
#   modified:   hello.py

# 简洁模式:一行一个文件,带分支信息
git status -sb
# ## main...origin/main
#  M hello.py
# ?? README.md

新手建议每次 add 前后、commit 前都看一眼 status,避免误提交。输出里红色表示还没暂存,绿色表示已暂存等待提交。

完整工作流:第一次提交

把上面五步串起来,就是一次完整的"从零到第一次提交"流程:

这就是 Git 日常 80% 的操作。剩下的分支、合并、远程,都是在这个循环之上扩展的。

常见误区与技巧

← 上一篇 Git 安装与配置

下一篇 Git 分支

✈️💬