文章目录
-
- Q&A
- [一、Git 入门](#一、Git 入门)
-
- [1. Git 核心认知](#1. Git 核心认知)
-
- [(1)什么是 Git](#(1)什么是 Git)
- [(2)Git 与集中式版本控制系统(如 SVN)的核心区别](#(2)Git 与集中式版本控制系统(如 SVN)的核心区别)
- [(3)Git 入门的主要目标](#(3)Git 入门的主要目标)
- [2. 环境准备](#2. 环境准备)
-
- [(1)Git 安装](#(1)Git 安装)
- (2)验证安装成功
- (3)必做配置:用户身份配置
- [3. Git 本地使用流程](#3. Git 本地使用流程)
-
- (1)初始化本地仓库(两种方式)
- (2)工作区操作:添加/修改文件
- [(3)暂存区操作:将文件纳入 Git 跟踪](#(3)暂存区操作:将文件纳入 Git 跟踪)
- (4)版本库操作:提交暂存区文件到本地仓库
- (5)查看版本历史:追溯提交记录
- [二、Git 核心原理及设计思想](#二、Git 核心原理及设计思想)
-
- [1. Git 核心设计理念](#1. Git 核心设计理念)
-
- (1)分布式架构设计
- (2)快照式存储(而非差异式存储)
- [(3)数据完整性:基于 SHA-1 哈希算法](#(3)数据完整性:基于 SHA-1 哈希算法)
- [2. Git 核心四层结构(从外到内,关键!)](#2. Git 核心四层结构(从外到内,关键!))
- [3. Git 核心对象模型](#3. Git 核心对象模型)
- [三、Git 常用命令详解及解释](#三、Git 常用命令详解及解释)
-
- [1. 仓库基础操作命令](#1. 仓库基础操作命令)
- [2. 版本提交与查看命令](#2. 版本提交与查看命令)
- [3. 分支操作命令(Git 核心亮点)](#3. 分支操作命令(Git 核心亮点))
- [4. 远程仓库操作命令(协作核心)](#4. 远程仓库操作命令(协作核心))
- [5. 版本回退命令(修复错误提交)](#5. 版本回退命令(修复错误提交))
- [6. 其他常用辅助命令](#6. 其他常用辅助命令)
- 四、总结
Q&A
这部分记录使用git遇到的问题。
-
.git文件是什么?命令行切换到某个目录下,执行
git init命令后,该目录会自动生成.gt文件夹,表示该目录可以通过 git 进行管理。 -
.gitignore文件怎么使用?使用
git add .会将当前目录所有文件都添加到暂存区,而我们有时不想全部添加进去。使用
touch .gitignore命令生成此文件,通过编辑器打开,输入想让git忽略的目录和文件(不想让git管理的文件夹)即可,每一行表示一个文件或目录。因为git一般用于管理文本文件、源码等,这些可以通过git查看内容变化情况。
待更新。。。。。。。
一、Git 入门
1. Git 核心认知
(1)什么是 Git
Git 是一款分布式版本控制系统(DVCS),用于跟踪文件(尤其是代码文件)的修改历史、协作开发、回溯版本、管理分支,解决了多人协作开发中的代码冲突、版本丢失、迭代混乱等问题。
如果我们写一个md文件或者代码,会有版本123...,通常的解决方法是:拷贝一份 => 命名后面添加
_v1,_v2,_完整版等等具有区分性的命名标识,这会导致目录中的文件越来越多,并且空间占用变多。使用 git 后,就不需要拷贝、重命名,却可以使得目录文件简洁,回退到不同版本只需要使用一个命令即可,从而方便我们的文件管理。
(2)Git 与集中式版本控制系统(如 SVN)的核心区别
| 特性 | Git(分布式) | SVN(集中式) |
|---|---|---|
| 仓库存储 | 每个本地端都有完整仓库(含所有版本历史) | 仅中央服务器有完整仓库,本地只有当前版本文件 |
| 网络依赖 | 离线可执行大部分操作(commit、分支等) | 大部分操作(提交、更新)依赖网络连接中央服务器 |
| 容错性 | 本地仓库可恢复,服务器故障不影响本地开发 | 中央服务器故障,无法进行版本管理和协作 |
| 分支效率 | 分支创建、切换、合并速度极快(轻量级) | 分支操作笨重,耗时较长 |
(3)Git 入门的主要目标
掌握「本地版本管理」和「远程协作」的基础流程,能独立完成代码提交、版本回溯、分支操作、远程同步等核心任务。
2. 环境准备
(1)Git 安装
- Windows 系统 :下载 Git for Windows,默认下一步安装即可(可自定义安装路径,建议保留 Git Bash 终端)。
- Mac 系统 :两种方式
- 安装 Xcode 命令行工具:
xcode-select --install - 通过 Homebrew 安装:
brew install git
- 安装 Xcode 命令行工具:
- Linux 系统 (Ubuntu/Debian):
sudo apt-get install git;(CentOS/RHEL):sudo yum install git
(2)验证安装成功
打开终端(Git Bash/系统终端),执行以下命令:
bash
git --version
若显示版本号则说明安装成功,若未显示,则检查环境变量是否添加成功。
(3)必做配置:用户身份配置
Git 要求每一次提交必须记录提交者身份,就像交作业需要有姓名及联系方式一样。这个是必做配置,好比QQ发信息必须要QQ号一样。
git 配置用户身份分为两种:
bash
# 1. 全局配置(设置一次即可,后续所有本地仓库通用)
# 多次执行会覆盖更新之前的配置,因此用户名和邮箱可以随时修改
git config --global user.name "Joker" # 自定义用户名
git config --global user.email "Joker@email" # 常用邮箱
# 2. 局部配置(仅当前仓库生效,适用于多身份场景,去掉 --global 即可),
git config user.name "你的仓库专属用户名"
git config user.email "你的仓库专属邮箱"
如果不进行协同工作,只是在自己电脑自己管理文件,用户名和邮箱可以随便填写,甚至造一个。但是一旦涉及到远程协同,或者使用GitHub,那么联系方式最好真实有效。
关于局部配置,这是针对某个项目的配置,因为一个人可以接手多个项目,而每个项目的"代号"或许是不同的。
3. Git 本地使用流程
先介绍最基础的「本地版本管理」流程,无需连接远程仓库,本地完成文件的版本跟踪。
(1)初始化本地仓库(两种方式)
-
方式 1:进入需要管理的目录,将之初始化为 Git 仓库(适用于从零开始的项目)
bash# 1. 进入目标目录(替换为你的实际目录路径) cd D:\Project\MyGitProject # 2. 初始化 Git 仓库,执行后目录下会生成隐藏的 .git 文件夹(核心配置目录) git init -
方式 2:克隆远程仓库到本地(适用于已有远程项目的场景)
bash# 完整格式:克隆并自动切换到指定分支 git clone -b 分支名 远程仓库地址 # 示例:克隆默认分支(main/master) git clone https://github.com/username/your-project.git
(2)工作区操作:添加/修改文件
在仓库目录下新建/修改文件(如 test.py、README.md),此时文件处于「工作区」(未被 Git 跟踪)。
(3)暂存区操作:将文件纳入 Git 跟踪
使用 git add 命令将工作区的文件提交到「暂存区」(临时存储,相当于"提交缓冲区"),这是提交到版本库的前置步骤。
bash
# 方式 1:添加指定单个文件(替换为你的文件名)
git add test.py
# 方式 2:添加当前目录下所有修改/新增的文件(推荐,高效便捷)
git add .
# 方式 3:添加当前目录下所有修改/新增的文件(与 git add . 功能类似,略有差异,可通用)
git add -A
(4)版本库操作:提交暂存区文件到本地仓库
使用 git commit 命令将暂存区的文件永久提交到「本地版本库」,生成一个唯一的版本快照(含提交信息、作者、时间等)。
bash
# 核心格式:-m 后跟随提交说明(必须填写,规范清晰的说明便于后续追溯版本)
git commit -m "提交说明:如 初始化项目、修改test.py功能、修复某某bug"
# 示例:对应你之前的操作
git commit -m "初始状态"
注意:提交说明要简洁明了,避免无意义的描述(如 "update"、"fix"),建议包含「操作类型+内容」。
(5)查看版本历史:追溯提交记录
使用 git log 命令查看本地仓库的所有提交历史,便于回溯版本、查看修改记录。
bash
# 方式 1:完整格式显示所有提交历史(按 q 键退出查看)
git log
# 方式 2:简洁格式显示(每行一条记录,仅显示哈希值前7位和提交说明,推荐)
git log --oneline
# 方式 3:显示所有分支的提交历史(含分支合并记录)
git log --graph --oneline --all
二、Git 核心原理及设计思想
理解 Git 的底层原理,能帮助我们更灵活地使用 Git,避免盲目操作导致的版本混乱。
1. Git 核心设计理念
(1)分布式架构设计
这是 Git 与 SVN 最本质的区别:每一个本地仓库都是一个完整的版本库,包含所有版本历史、分支、标签等数据。
- 无需依赖中央服务器即可完成大部分操作(commit、分支管理、版本回溯等);
- 当远程服务器故障时,可通过任意一个本地仓库恢复远程仓库数据,容错性极强;
- 多人协作时,本质是「本地仓库」与「远程仓库」之间的版本同步,而非依赖中央服务器统一管理。
(2)快照式存储(而非差异式存储)
Git 存储版本的方式不是「记录每个版本与上一版本的差异」(如 SVN),而是「记录每个版本的完整文件快照」:
- 当文件未修改时,Git 不会重复存储该文件,而是通过「指针」指向之前的快照,节省存储空间;
- 当文件修改时,Git 会存储该文件的新快照,保证每个版本都能独立完整恢复;
- 这种设计使得 Git 的版本回溯、分支切换速度极快,因为无需计算差异,直接切换快照即可。
(3)数据完整性:基于 SHA-1 哈希算法
Git 中所有数据(文件、提交记录、分支、标签等)都会通过 SHA-1 算法生成一个 40 位的十六进制哈希值(如 a1b2c3d4e5f6...),用于:
- 唯一标识每一份数据,确保数据不被篡改(任何微小修改都会导致哈希值变化);
- 快速查找数据,Git 通过哈希值索引和定位版本、文件等资源;
- 你在
git log中看到的一串字符,就是提交记录的哈希值,可通过哈希值精准回溯版本。
2. Git 核心四层结构(从外到内,关键!)
这是 Git 操作的底层逻辑,所有 Git 命令本质都是在这四层结构之间传递数据,理解后就能明白「为什么要 git add 再 git commit」。
| 层级名称 | 英文名称 | 核心作用 | 是否可手动修改 | 对应操作命令 |
|---|---|---|---|---|
| 工作区 | Working Directory | 本地实际操作的目录(存放项目文件) | 是(直接编辑) | 无专门命令,手动新增/修改文件 |
| 暂存区 | Staging Area/Index | 临时缓冲区,存放待提交的文件修改 | 否(通过命令) | git add(存入)、git reset(移出) |
| 本地版本库 | Local Repository | 本地核心仓库,存储所有版本快照、分支等 | 否(通过命令) | git commit(存入)、git reset(回溯) |
| 远程版本库 | Remote Repository | 远程服务器上的仓库(如 GitHub/Gitee) | 否(通过命令) | git push(上传)、git pull/git fetch(下载) |
四层结构数据流转核心逻辑
- 开发者在「工作区」编辑文件(新增/修改/删除);
- 通过
git add将工作区的修改提交到「暂存区」(相当于"确认要提交这些修改"); - 通过
git commit将暂存区的修改提交到「本地版本库」(生成永久版本快照,本地版本管理完成); - 如需协作或备份,通过
git push将本地版本库的提交同步到「远程版本库」; - 如需获取他人的修改,通过
git pull/git fetch将远程版本库的提交同步到本地版本库,再同步到工作区。
3. Git 核心对象模型
Git 底层通过四种基本对象存储所有数据,构成完整的版本历史:
- Blob 对象:存储文件的内容(不存储文件名,仅存储文件数据),一个 Blob 对应一个文件的快照;
- Tree 对象:存储目录结构和文件映射关系(记录文件名与对应的 Blob 对象哈希值,以及子目录对应的 Tree 对象);
- Commit 对象:存储一次提交的完整信息(包含对应 Tree 对象哈希值、父提交哈希值、作者、时间、提交说明),每一个 Commit 对象对应一个版本;
- Tag 对象:标签对象,用于标记重要的版本(如发布版本 v1.0、v2.0),本质是指向 Commit 对象的指针,方便快速定位重要版本。
三、Git 常用命令详解及解释
1. 仓库基础操作命令
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git init |
初始化本地 Git 仓库 | git init |
cd D:\Project && git init |
执行后生成隐藏 .git 文件夹,不可删除 |
git clone |
克隆远程仓库到本地 | git clone [-b 分支名] 远程地址 |
git clone -b dygraph https://gitee.com/xxx.git |
-b 指定克隆后自动切换的分支,默认切换默认分支 |
git config |
配置 Git 信息(如用户身份) | git config [--global] key value |
git config --global user.name "LiMing" |
--global 表示全局配置,无则为当前仓库局部配置 |
git status |
查看工作区/暂存区状态(文件修改情况) | git status(完整)/ git status -s(简洁) |
git status -s |
快速判断哪些文件未跟踪、已修改、已暂存 |
2. 版本提交与查看命令
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git add |
将工作区修改提交到暂存区 | git add 文件名 / git add . |
git add README.md / git add . |
git add . 提交当前目录所有修改,最常用 |
git commit |
将暂存区修改提交到本地版本库 | git commit -m "提交说明" |
git commit -m "修复:登录功能参数错误" |
-m 必须指定提交说明,否则会打开默认编辑器 |
git commit -am |
跳过暂存区,直接将已跟踪文件提交到本地仓库 | git commit -am "提交说明" |
git commit -am "更新:优化用户列表样式" |
仅对「已被 Git 跟踪的文件」生效,新增文件需先 git add |
git log |
查看本地提交历史 | git log / git log --oneline |
git log --oneline --graph |
--graph 显示分支合并图,--all 显示所有分支历史 |
git show |
查看指定版本/文件的详细修改内容 | git show 版本哈希值 / git show 文件名 |
git show a1b2c3d(哈希值前7位即可) |
可查看某次提交修改了哪些内容 |
3. 分支操作命令(Git 核心亮点)
分支是 Git 最强大的功能之一,用于并行开发(如主分支、开发分支、bug修复分支),所有分支操作都是轻量级的。
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git branch |
查看/创建本地分支 | git branch(查看)/ git branch 分支名(创建) |
git branch dev(创建dev分支) |
查看时,当前分支前会有 * 标记 |
git branch -r |
查看远程分支 | git branch -r |
git branch -r |
显示远程仓库的所有分支 |
git branch -a |
查看所有分支(本地+远程) | git branch -a |
git branch -a |
远程分支通常以 origin/分支名 显示 |
git checkout |
切换分支/恢复工作区文件 | git checkout 分支名(切换) |
git checkout dev(切换到dev分支) |
切换分支前,需提交当前分支的修改(避免冲突) |
git checkout -b |
创建并切换到新分支 | git checkout -b 新分支名 |
git checkout -b test(创建并切换test分支) |
等价于 git branch test + git checkout test |
git merge |
合并指定分支到当前分支 | git merge 待合并分支名 |
git checkout main && git merge dev(将dev合并到main) |
合并时可能出现冲突,需手动解决 |
git branch -d |
删除本地已合并的分支 | git branch -d 分支名 |
git branch -d dev |
-D 表示强制删除未合并的分支(谨慎使用) |
git push origin --delete 分支名 |
删除远程分支 | git push origin --delete test |
git push origin --delete test |
删除后需通知协作成员同步更新 |
4. 远程仓库操作命令(协作核心)
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git remote |
查看/管理远程仓库关联 | git remote -v(查看详细信息) |
git remote -v |
显示远程仓库名称(默认origin)和地址 |
git remote add |
关联远程仓库到本地 | git remote add origin 远程地址 |
git remote add origin https://gitee.com/xxx.git |
仅需执行一次,关联后可通过origin操作远程仓库 |
git push |
将本地版本库提交同步到远程仓库 | git push [-u] origin 分支名 |
git push -u origin main |
-u 绑定当前分支与远程分支,后续可直接 git push |
git fetch |
拉取远程仓库最新版本到本地版本库(不合并到工作区) | git fetch origin 分支名 |
git fetch origin main |
需手动执行 git merge 合并到工作区,更灵活 |
git pull |
拉取远程仓库最新版本并自动合并到当前工作区 | git pull origin 分支名 |
git pull origin dev |
等价于 git fetch + git merge,更便捷,优先使用 |
5. 版本回退命令(修复错误提交)
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git reset |
回溯本地版本库到指定版本 | git reset --hard 版本哈希值 |
git reset --hard a1b2c3d |
--hard 会丢弃当前工作区/暂存区修改(谨慎使用);--soft 保留工作区/暂存区修改 |
git revert |
撤销指定提交的修改(生成新提交,不删除历史) | git revert 版本哈希值 |
git revert a1b2c3d |
适合已推送到远程仓库的错误提交,不破坏版本历史 |
git checkout |
恢复工作区文件到暂存区/指定版本状态 | git checkout -- 文件名 |
git checkout -- test.py |
丢弃工作区对该文件的修改,恢复到暂存区状态 |
6. 其他常用辅助命令
| 命令 | 核心作用 | 常用格式 | 示例 | 补充说明 |
|---|---|---|---|---|
git diff |
查看文件修改差异(工作区vs暂存区/版本库) | git diff(工作区vs暂存区)/ git diff 版本哈希值 |
git diff test.py |
显示具体修改的行内容,按 q 退出 |
git stash |
暂存当前工作区未提交的修改(临时切换分支) | git stash(暂存)/ git stash pop(恢复) |
git stash / git stash pop |
适用于分支未提交修改,但需紧急切换分支的场景 |
git ignore |
忽略指定文件/目录(不纳入Git跟踪) | 创建 .gitignore 文件,写入忽略规则 |
在文件中写入 node_modules/(忽略该目录) |
.gitignore 需提交到仓库,供协作成员共享 |
四、总结
- 上手核心 :先掌握「工作区→暂存区→本地版本库→远程版本库」的数据流,核心命令
git add、git commit、git push、git pull; - 原理核心:分布式架构、快照式存储、SHA-1 哈希保证完整性,四层结构是所有操作的底层逻辑;
- 常用重点 :分支操作(
git branch/git checkout/git merge)、远程协作(git push/git pull)、版本回退(git reset/git revert)是日常开发高频使用的命令; - 使用规范 :提交说明清晰、分支命名规范(如
main/master(主分支)、dev(开发分支)、bugfix/xxx(bug修复分支))、重要版本打标签(git tag v1.0),便于协作和维护。