FORMA

Git 基础概念与命令速查

Git 是目前最流行的分布式版本控制系统。学习路径见 运维导读。它用于追踪文件的变化,支持多人协作开发。相比于集中式版本控制(如 SVN),Git 每个开发者本地都拥有完整的仓库历史,不依赖中央服务器就能进行提交、分支、合并等操作。

一、什么是 Git?

  • 版本控制:记录文件或目录的修改历史,可以随时回退到任意版本,查看修改内容。
  • 分布式:每个开发者的本地仓库都包含完整的版本历史(不止是最新代码),可以在没有网络的情况下工作,并最终与远程仓库同步。
  • 快照,而非差异:Git 将每次提交视为一次完整的项目快照,并保存快照的引用,而不是基于文件的差异做增量。

二、Git 的核心区域

Git 管理文件的生命周期涉及四个主要区域:

区域英文说明
工作区Working Directory你在电脑上看到的实际文件目录,可以直接编辑、新增、删除文件。
暂存区Staging Area / Index一个临时存储区域。使用 git add 将工作区的修改放入暂存区,准备下一次提交。
本地仓库Local Repository使用 git commit 将暂存区的修改持久保存到本地 Git 仓库(.git 目录)。这里存储了完整的提交历史。
远程仓库Remote Repository托管在服务器(如 GitHub、GitLab、Gitee)上的共享仓库。通过 git push 将本地提交推送到远程分支,通过 git pull / git fetch 获取他人的更新。

工作流程图示

text
工作区 → (git add) → 暂存区 → (git commit) → 本地仓库 → (git push) → 远程仓库
                        ↑                             ↓
                      (git checkout -- <file>)    (git pull / fetch)
                        放弃工作区修改              更新本地

三、文件的三种状态

Git 中的文件可能处于以下三种状态之一:

状态英文描述对应命令
已修改modified文件已被修改(在工作区中进行了编辑),但还没有被标记为要提交。编辑文件后自动进入此状态
已暂存staged已将修改后的文件添加到暂存区,准备纳入下一次提交。git add
已提交committed暂存区的修改已经安全地保存到本地仓库中,形成历史版本。git commit

注意已跟踪(tracked) 指的是上一次提交时已经存在的文件,或者已经执行过 git add 的文件。未跟踪(untracked)是指新创建但从未被 Git 管理的文件(通常需要先 git add)。

四、简单示例

bash
# 新建文件并查看状态(此时为未跟踪)
echo "Hello" > README.md
git status      # 显示未跟踪文件

# 添加到暂存区(变为已暂存)
git add README.md

# 提交到本地仓库(变为已提交)
git commit -m "add README"

# 修改工作区文件(变为已修改)
echo "World" >> README.md
git status      # 显示已修改

# 再次添加到暂存区并提交
git add README.md
git commit -m "update README"

五、常用命令速查表

操作命令说明
查看状态git status显示工作区和暂存区的状态(哪些文件被修改、未跟踪等)
添加文件git add .将当前目录所有变化添加到暂存区(也可以指定具体文件)
提交git commit -m "msg"将暂存区内容提交到本地仓库,并附上说明
拉取并合并git pull从远程仓库拉取最新提交并合并到当前分支(相当于 fetch + merge
推送git push将本地分支的提交推送到远程仓库(需设置上游分支)
查看历史git log --oneline以简洁的一行形式显示提交历史(hash + 提交说明)
创建分支git checkout -b feature创建并切换到新分支 feature(Git 2.23+ 也可用 git switch -c feature
合并分支git merge featurefeature 分支合并到当前分支
查看差异git diff显示工作区与暂存区之间的差异(未暂存的改动)
撤销工作区修改git checkout -- file丢弃工作区中对 file 的修改,还原到最近一次 git addgit commit 的状态
撤销暂存git reset HEAD filefile 从暂存区撤回到工作区(保留修改内容),新版也可用 git restore --staged file
撤销提交(软回退)git reset --soft HEAD~1撤销最近一次提交,修改保留在暂存区(可以重新编辑后再次提交)
克隆仓库git clone <url>将远程仓库完整克隆到本地,自动创建 origin 远程别名和主分支跟踪

六、进阶命令速查(扩展)

除了以上最基础的命令,日常开发中还会频繁用到下面这些:

场景命令说明
临时保存改动git stash将工作区/暂存区的改动临时收起,切换分支处理紧急任务后再 git stash pop 恢复
查看 stash 列表git stash list列出所有暂存的改动
变基git rebase main将当前分支的提交重新应用到 main 最新提交之上,保持线性历史
摘取单个提交git cherry-pick <hash>将某个提交的改动应用到当前分支(不需要合并整个分支)
图形化历史git log --oneline --graph --all以图形方式查看所有分支的提交走向
查找引入 bug 的提交git bisect start通过二分查找定位引入问题的提交
查看某行的最后修改人git blame <file>逐行显示文件的最后修改提交与作者

提示git add . 添加当前目录所有变化(包括新建、修改、删除);git add -A 添加整个工作区的变化。git pull 默认会合并(merge),若希望保持线性历史可使用 git pull --rebasegit checkout -- <file>git reset 操作不可逆,请谨慎使用,尤其在 --hard 模式下。

七、注意事项

  • 提交前先用 git status / git diff 确认改动范围,避免误提交无关文件。
  • 命令别名(见 Git 安装与配置)可以极大提升效率,建议尽早配置。
  • 具体的分支、远程协作、历史回退等操作,详见后续章节。

八、小结

  • Git 是分布式版本控制系统,每个开发者都有完整的仓库副本。
  • 文件变化在工作区、暂存区、本地仓库之间流动,最终通过远程仓库协作。
  • 文件状态分为已修改、已暂存、已提交三种,理解这些是掌握 Git 的基础。
  • 掌握本文的速查表后,可以进行日常的 addcommitpushpull 等操作;更复杂的场景可查阅后续章节。

参考文献

资料说明
Pro Git · 起步官方书
Git 文档命令参考
运维导读本目录路径