Git 简介
Git 是目前全球最流行的分布式版本控制系统(Distributed Version Control System, DVCS),核心作用是追踪文件修改历史、支持多人协同开发,并能高效管理代码(或任何文本类文件)的版本迭代。它由 Linux 内核创始人 Linus Torvalds 于 2005 年为解决 Linux 内核开发中的协作问题而设计,如今已成为软件开发(尤其是团队开发)的标配工具。
一、Git 的核心特点
Git 的优势源于其 “分布式” 设计和高效的版本管理机制,核心特点可概括为以下 5 点:
分布式架构(核心优势) 与传统的 “集中式版本控制系统(如 SVN)” 不同,Git 中每个开发者的本地设备都拥有完整的代码仓库(包含所有历史版本和分支),无需依赖中央服务器即可独立完成代码提交、回滚、分支创建等操作。仅在需要共享代码时(如同步团队进度),才与远程仓库(如 GitHub、GitLab)交互,大幅降低了对网络的依赖,也避免了中央服务器故障导致的风险。
完整的版本追踪 Git 会记录文件的每一次修改(包括修改人、修改时间、修改内容),形成不可篡改的 “版本历史”。开发者可随时回滚到任意历史版本,或对比不同版本间的差异,轻松定位问题(如 “某功能是在哪次修改后出现 Bug 的”)。
高效处理大项目 Git 采用 “快照式” 存储(而非传统的 “差异比较”),仅记录文件修改的关键信息,而非每次修改的完整副本,因此对大型项目(如 Linux 内核、Android 源码)的版本管理效率极高,提交、分支切换等操作通常在毫秒级完成。
灵活的分支管理 分支是 Git 的 “灵魂功能”。开发者可基于主分支(如
main
)创建独立分支(如feature/login
开发登录功能、bugfix/payment
修复支付 Bug),分支间的修改互不干扰;完成后再通过 “合并(merge)” 或 “变基(rebase)” 将分支代码整合回主分支,完美支持并行开发(如多人同时开发不同功能)。数据完整性保障 Git 对所有文件和版本信息都通过 SHA-1 哈希算法生成唯一标识(40 位十六进制字符串),任何对文件或历史的篡改都会导致哈希值变化,Git 能立即检测到,确保代码历史的真实性和完整性。
二、Git 的核心概念
理解 Git 的工作流程,需先掌握 4 个核心区域和几个关键术语:
1. 四大核心区域
Git 的工作流程围绕 “文件在不同区域的流转” 展开,四个区域的关系如下:
区域名称 | 英文 | 作用说明 |
---|---|---|
工作区 | Working Directory | 开发者直接编辑文件的目录(如本地项目文件夹),是 “未被 Git 追踪” 的原始文件区。 |
暂存区 | Staging Area | 临时存放 “待提交” 的修改(通过 git add 命令将工作区的修改移入),可理解为 “提交前的筛选器”。 |
本地仓库 | Local Repository | 存储所有版本历史的核心区域(通过 git commit 命令将暂存区的修改移入),位于项目目录下的 .git 隐藏文件夹中。 |
远程仓库 | Remote Repository | 用于团队共享的公共仓库(如 GitHub 上的仓库),通过 git push/pull 与本地仓库同步。 |
2. 关键术语
Commit(提交):将暂存区的修改 “固化” 到本地仓库的操作,每次提交会生成一个唯一的
commit ID
(哈希值),代表一个版本。提交时需填写 “提交信息”(如 “完成登录接口开发”),便于后续追溯。Branch(分支):版本历史的 “平行时间线”,默认分支通常为
main
(或旧版本的master
),新建分支会从主分支的某个节点 “分叉”,独立记录修改。Merge(合并):将一个分支的修改整合到另一个分支的操作(如将
feature/login
合并到main
)。Pull/Push:
git pull
是 “拉取远程仓库的最新代码到本地”,git push
是 “将本地仓库的修改推送到远程仓库”,是团队协作的核心操作。Clone(克隆):将远程仓库的完整内容下载到本地,生成一个新的本地仓库(首次获取项目代码时使用)。
三、Git 常用基础命令
以下是日常开发中最高频的 Git 命令,覆盖 “初始化 - 修改 - 提交 - 同步” 的完整流程:
命令 | 作用说明 | 示例 |
---|---|---|
git init | 在本地目录初始化一个 Git 仓库(创建 .git 文件夹) | cd 项目目录 && git init |
git clone <远程地址> | 克隆远程仓库到本地 | git clone https://github.com/xxx/xxx.git |
git add <文件/目录> | 将工作区的修改添加到暂存区 | git add index.js (单个文件)、git add . (所有修改) |
git commit -m "<信息>" | 将暂存区的修改提交到本地仓库,-m 后为提交信息 | git commit -m "fix: 修复登录验证码过期问题" |
git status | 查看当前工作区、暂存区的状态(如 “未追踪的文件”“待提交的修改”) | git status |
git log | 查看本地仓库的提交历史(包含 commit ID 、作者、时间等) | git log --oneline (简洁模式) |
git branch | 查看 / 创建分支(不加参数查看,加参数创建) | git branch (查看)、git branch feature/pay (创建支付分支) |
git switch <分支名> | 切换到指定分支(Git 2.23+ 推荐,替代旧命令 git checkout ) | git switch main |
git merge <分支名> | 将指定分支合并到当前分支 | git switch main && git merge feature/pay (将支付分支合并到主分支) |
git pull | 拉取远程仓库的最新代码并合并到本地当前分支 | git pull origin main (拉取远程 main 分支) |
git push | 将本地当前分支的修改推送到远程仓库 | git push origin feature/pay (推送本地支付分支到远程) |
四、Git 与 SVN 的核心区别
很多新手会将 Git 与传统集中式版本控制系统 SVN 对比,两者的核心差异如下:
对比维度 | Git(分布式) | SVN(集中式) |
---|---|---|
架构 | 每个本地设备有完整仓库,无强制中央依赖 | 仅中央服务器有完整仓库,本地仅存当前版本 |
离线工作 | 支持(提交、分支等操作无需网络) | 不支持(几乎所有操作需连接中央服务器) |
分支效率 | 分支创建 / 切换 / 合并速度极快(毫秒级) | 分支操作依赖中央服务器,效率低 |
数据安全性 | 本地和远程均有完整备份,不易丢失 | 依赖中央服务器,服务器故障可能丢失数据 |
学习成本 | 概念较多(如暂存区、分布式),入门稍难 | 概念简单,入门快 |
五、Git 常见应用场景
团队协作开发:多人同时开发一个项目,通过分支隔离修改,通过远程仓库同步进度,避免代码冲突(如通过
git pull
提前同步他人代码)。个人项目版本管理:追踪个人项目的修改历史,如需回滚到 “上周能正常运行的版本”,可通过
git log
找到对应commit ID
后回滚。开源项目贡献:通过 “Fork(复刻远程仓库)→ 本地修改 → Pull Request(PR,提交贡献请求)” 的流程,向开源项目提交代码(如向 GitHub 上的知名项目贡献 Bug 修复)。
六、主流 Git 托管平台
Git 本身是命令行工具,需配合远程仓库使用,目前主流的托管平台有:
GitHub:全球最大的开源项目托管平台,支持 Git 仓库管理、PR 协作、CI/CD 等功能。
GitLab:支持私有仓库(适合企业内部项目),功能全面,可自行部署私有 GitLab 服务器。
Gitee(码云):国内的 Git 托管平台,访问速度快,适合国内团队或对隐私有要求的项目。
总之,Git 不仅是 “管理代码版本的工具”,更是现代软件开发协作流程的核心基础设施。掌握 Git 的基础操作和核心理念,是开发者必备的技能之一。