Git 基础操作:从 init 到第一次 commit 的完整走查
日常其实只有一个循环:改文件 → git add → git commit。把 git status 读明白,循环就不会走错。
最后更新:2026-10-30
三句话入门基础操作
- 一个 Git 仓库本质就是一个
.git目录;git init就是创建它。 - 日常只有一个循环:改文件 →
git add→git commit。 git status是你最该常敲的命令——它永远告诉你「现在能做什么」。
新建仓库还是克隆已有仓库
# 新建:在空目录里
git init
git init -b main # 直接把初始分支命名为 main
# 克隆:已有远程仓库
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git # 只要最新代码init 之后目录里会多一个 .git/,不要手动改它;想「取消版本控制」删掉 .git/ 即可(会丢失全部历史)。
日常三步循环
git status # 1. 看现在处于什么状态
git add src/app.js # 2. 把改动放进暂存区
git commit -m "feat: 添加登录页" # 3. 提交,形成一次快照
git log --oneline # 确认提交成功循环可以重复很多次;一次提交只做一件事,历史才可读、可回滚。
读懂 git status
| 状态 | 含义 |
|---|---|
| Untracked files | 新文件,Git 还没跟踪,需要 add |
| Changes not staged | 已跟踪文件被改,但还没 add |
| Changes to be committed | 已 add,等 commit |
| 同时出现在两栏 | add 之后又改了文件,两个版本并存 |
用 git status -s(短格式)更快:M 修改、A 新增、?? 未跟踪、D 删除。
add 的几种用法
git add file.txt # 单个文件
git add src/ # 整个目录
git add -A # 所有改动(新增 + 修改 + 删除)
git add -p # 交互式,逐个 hunk 选择要不要暂存git add .只加当前目录及子目录;git add -A加整个仓库(含删除)- 想「只提交一部分改动」,用
git add -p——这是把提交拆干净的关键
写好一次提交
git commit -m "fix: 修复登录态过期判断"
git commit -am "chore: 更新依赖" # 跳过 add(仅限已跟踪文件)
git commit --amend # 修补上一次提交(信息或内容)- 提交信息用「类型: 描述」,如
feat:/fix:/docs:/refactor: --amend会改写历史,已推送的提交不要 amend- 提交前再看一眼
git diff --staged,避免把调试代码带上
看历史
git log --oneline --graph --decorate # 一行一提交,带分支图
git show HEAD # 看最近一次提交的改动
git diff HEAD~1 HEAD # 最近两次提交之间的差异只关心某个文件的历史,用 git log -p <file> 追单个文件的每次改动。
常见问题
第一次提交前要做什么?
先配好身份(user.name / user.email),否则 commit 会报 Please tell me who you are;再确认 .gitignore 已排除依赖与密钥,避免把 node_modules、.env 提交进去。
git add . 和 git add -A 有什么区别?
git add . 只处理当前目录及其子目录;git add -A 处理整个仓库,并且会记录删除。在仓库根目录两者通常等价,但在子目录里执行时结果不同。
提交信息写错了怎么改?
最近一次且未推送:git commit --amend -m 新信息。已推送:不要 amend(会改写历史),用 git revert,或者再提交一次 docs: 补充说明。