在软件开发中,Git 就像是代码的“时光机”。无论你是想回退到过去的工作状态,还是需要与团队成员无缝协作,Git 都是现代开发流程中最为不可或缺的工具。
这篇文章沉淀了 Git 的核心机制与最常用的实战命令,旨在建立一个清晰、规范的 Git 知识体系。
1. 核心概念:四个区域
理解 Git 的第一步,是弄清楚代码在本地与云端流转的“四个区域”。几乎所有的 Git 命令,本质上都是在控制代码在这四个区域之间的移动:
| 区域 (Area) | 作用 (Function) |
|---|---|
| 工作区 (Workspace) | 本地电脑上你当前正在编写、修改文件的实际目录。 |
| 暂存区 (Index/Stage) | 存放即将提交的修改,相当于一个准备结账的“购物车”。 |
| 本地仓库 (Repository) | 存放你个人在本地已经提交的所有版本历史记录。 |
| 远程仓库 (Remote) | 托管在云端(如 GitHub、GitLab 或自建代码服务器)的代码库。 |
2. 初始配置
安装完 Git 后,首先需要配置全局的身份标识。这会在你的每一次提交(Commit)中留下记录。在团队协作和代码审计时,正确的用户名和邮箱是非常重要的。
# 设置全局用户名
git config --global user.name "masiyuan"
# 设置全局官方工作邮箱
git config --global user.email "masiyuan@yuansima.com"
# 查看当前所有配置,确认信息无误
git config --list
3. 准备工作:SSH 密钥与仓库克隆
在正式进入开发并提交代码之前,我们需要建立本地开发环境与远程服务器之间的安全连接,并将远端项目拉取到本地。
步骤 A:生成并配置 SSH 密钥
在使用远程仓库(尤其是自建的私有代码服务器)时,强烈建议配置 SSH 密钥。这样在后续的推送和拉取操作中,就不必反复输入账号密码,既安全又高效。
这里推荐使用目前更安全、性能更好的 ed25519 算法:
ssh-keygen -t ed25519 -C "masiyuan@yuansima.com"
💡 命令解析:
-t ed25519:指定密钥算法类型为ed25519。-C "...":添加注释信息(通常填入你的邮箱),以便日后识别密钥的归属。
一路回车即可完成密钥对的生成。接着,运行以下命令查看并复制你的公钥内容:
cat ~/.ssh/id_ed25519.pub
将终端里输出的那段以 ssh-ed25519 开头的长字符串复制下来,粘贴到你的代码托管平台(如私有代码服务器、GitLab 或 GitHub)的 SSH Keys 设置中。
步骤 B:克隆远程仓库 (Clone)
配置好 SSH 密钥后,你就可以通过安全协议将远程服务器上的现有代码库克隆到本地:
git clone git@club.yuansima.com:qtc/sdd/uig/web.git
💡 核心知识点解析:
git clone:克隆命令。它会在你当前的目录下自动创建一个与远程仓库同名的文件夹(如web),并将该项目完整的代码和所有的版本历史悉数下载到该文件夹中。- 权限排查:如果执行该命令时提示
Permission denied (publickey),请检查上一步的公钥是否正确添加到了代码服务器中,或本地的私钥是否具有相应的读取权限。
4. 日常核心工作流 (Workflow)
项目克隆到本地后,你就进入了日常开发阶段。这是你每天写代码都会经历的最经典的“三步走”流程:
第一步:将修改放入暂存区 (Add)
当你在工作区新建了文件,或者修改了原有代码后,Git 并不会自动把它们纳入版本控制。你需要手动将这些变动放进暂存区:
git add .
💡 核心知识点解析:
.(点号):在 Linux/Unix 终端中代表“当前目录”。git add .:将当前目录下所有新增、修改以及删除的文件变动,一次性全部添加到暂存区。- 精准追踪:如果你指向提交某个特定文件的改动,避免把其他临时草稿带入,可以将点号替换为具体的文件路径,例如:
git add src/main.cpp。
第二步:将暂存区内容提交到本地仓库 (Commit)
当变动进入暂存区后,我们需要为这次修改编写一句简短、明确的说明,将其正式固化进本地版本库:
git commit -m "开始"
💡 核心知识点解析:
-m参数:代表 Message,后面紧跟的引号内就是你的“提交说明”。- 编写规范:项目刚刚初始化或环境搭建完毕时,可以用
"开始"或"Initial commit"作为起步。但在后续的日常迭代中,强烈建议严格遵守 Commit Message 规范(例如:feat: 增加用户登录接口或fix: 修复 ClickHouse 数据同步中的类型转换问题),以便日后追溯。
第三步:推送到远程仓库 (Push)
在本地完成 Commit 后,最后一步就是将这些本地的版本记录同步到远端服务器,实现数据备份与团队共享:
git push origin main
💡 核心知识点解析:
origin:这是 Git 给远程仓库设定的默认别名。它就代表着你执行clone命令时关联的那台远程服务器(在此例中即指向club.yuansima.com的对应库)。main:代表你要推送的目标分支名称。在现代 Git 工作流中,默认主分支通常被命名为main(部分早期项目可能仍在使用master)。
5. 分支管理 (Branching)
分支是 Git 的杀手锏功能。它允许你从主线上隔离开来,开辟一条独立的时间线去开发新功能或修复 Bug,而绝不影响生产环境的稳定性。
- 查看当前分支:
git branch - 创建新功能分支:
git branch feature-login - 切换到指定分支:
git switch feature-login(注:老版本命令为git checkout feature-login) - 快捷创建并切换:
git checkout -b feature-data-model - 合并分支:当新功能开发测试完毕后,先切换回主分支:
git switch main,然后执行合并命令:git merge feature-login。
6. 常见问题处理与高级技巧
Q: 刚刚完成 commit,突然发现漏掉了一个文件,或者提交信息写错了,该怎么补救?
A: 不要慌,使用 --amend 参数可以追加修改,并在不产生新提交记录的前提下覆盖上一次的 commit:
# 将漏掉的文件补加进暂存区
git add forgotten-file.py
# 修正上一次的提交信息并合并暂存区改动
git commit --amend -m "feat: 完善数据流组件并补充缺失文件"
Q: 我在工作区改乱了代码,想要放弃当前所有未提交的修改,彻底恢复到上一次 commit 的状态?
A: 可以直接恢复工作区。注意:此操作不可逆,工作区未提交的代码会永久丢失!
git restore .
Q: 远程服务器有其他人提交了新代码,本地如何在推代码前进行同步?
A: 绝大多数情况下,在你 push 之前,应该先拉取远端的最新改动进行合并:
git pull origin main
总结
Git 的命令体系非常庞大,但在日常开发中,80% 的场景都可以通过 add .、commit、push 和 pull 这一套组合拳轻松应对。
保持高频、小步快跑且信息明确的 Commit 习惯,不仅能让你的代码仓库井井有条,更是系统架构设计与软件工程素养的重要体现。