Git 基础命令完全指南:add/commit/log/status/diff
Introduction
Git 是目前最流行的分布式版本控制系统,广泛应用于软件开发的各个场景。无论是个人项目还是团队协作,Git 都是不可或缺的工具。本文详细介绍 Git 最核心的五个基础命令,帮助你快速掌握版本控制的基本操作。
基础语法
# 查看工作区状态
git status
将文件添加到暂存区
git add <文件名> # 添加单个文件
git add . # 添加所有修改的文件
git add -A # 添加所有文件(包括删除)
将暂存区内容提交到版本库
git commit -m "提交信息"
git commit -am "提交信息" # 仅跟踪文件,直接提交(跳过 git add)
查看提交历史
git log
git log --oneline # 简洁模式
git log --graph # 图形化显示分支
git log -n <数量> # 查看最近 n 条提交
查看文件差异
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 最新提交
git diff HEAD # 工作区 vs 最新提交
git diff <分支1> <分支2> # 比较两个分支差异
完整代码示例
# ===== Git 基础命令实战 =====
1. 初始化 Git 仓库
git init my-project
cd my-project
2. 创建文件并查看状态
echo "# 我的项目" > README.md
git status
输出:Untracked files: README.md(红色,表示未跟踪)
3. 将文件添加到暂存区
git add README.md
git status
输出:Changes to be committed: README.md(绿色,表示已暂存)
4. 提交文件
git commit -m "feat: initial commit"
输出:[master (root-commit) abc1234] feat: initial commit
5. 修改文件并查看差异
echo "这是第二次修改" >> README.md
git diff # 查看工作区与暂存区的差异
输出:+这是第二次修改
git add README.md
git diff --cached # 查看暂存区与最新提交的差异
输出:+这是第二次修改
6. 再次提交
git commit -m "docs: update README"
7. 查看提交历史
git log
输出:
commit abc1234 (HEAD -> master)
Author: Your Name <you@example.com>
Date: ...
docs: update README
#
commit def5678
Author: Your Name <you@example.com>
Date: ...
feat: initial commit
8. 查看简洁历史
git log --oneline
输出:
abc1234 docs: update README
def5678 feat: initial commit
9. 模拟工作流程:修改 -> 暂存 -> 提交
echo "新功能开发中" > feature.txt
git add feature.txt
git commit -m "feat: add feature placeholder"
10. 使用 git commit -am(仅适用于已跟踪文件)
echo "快速修改" >> README.md
git commit -am "quick: append to README"
echo "完成!"
常见问题
Q1: git commit -m 和 git commit 有什么区别?
git commit -m "信息" 直接在命令行指定提交信息,适合简短描述。git commit 不带 -m 会打开默认编辑器(通常是 vim)让你输入多行提交信息,适合需要详细描述的情况。使用 git commit -v 可以打开编辑器并显示 diff 内容。
Q2: git add . 和 git add -A 有什么区别?
在大多数情况下两者效果相同。但在克隆的仓库中,git add . 只会添加当前目录及子目录的文件,而 git add -A(或 git add --all)会添加所有修改,包括仓库根目录的变更。建议优先使用 git add -A。
Q3: 如何撤销 git add?
使用 git reset HEAD <文件名> 可以将文件从暂存区移除,但保留工作区的修改。git reset HEAD(不加文件名)会取消所有暂存。如果想完全丢弃修改,需要用 git checkout -- <文件名> 或 git restore <文件名>。
Q4: 提交信息应该怎么写?
推荐使用约定式提交(Conventional Commits)格式:type: description,例如 feat: add user login、fix: resolve null pointer。常见的 type 包括:feat(新功能)、fix(修复)、docs(文档)、style(格式)、refactor(重构)、test(测试)、chore(杂项)。
延伸阅读
- Pro Git 官方中文教程 - 深入学习 Git 内部原理
- Git 命令参考手册 - 所有 Git 命令的完整文档
- Learn Git Branching - 交互式学习 Git 分支操作