1033 字
5 分钟
Git 版本控制
基础知识
版本控制
版本控制是指在软件开发过程中,对各种程序代码、配置文件及说明文档等文件变更进行管理的过程。它是软件配置管理的核心思想之一。版本控制的主要功能包括追踪文件的变更、并行开发、分支与合并、历史记录等。通过版本控制,可以记录文件的变更历史,确保不同开发者之间的协同工作,提高开发效率。
版本控制工具:
- 集中式代表:SVN
- 分布式代表:Git、mercurial
文件区域
- 工作区:
- .git所在目录,就是资源管理器中实际的目录
- 这里的文件状态是 未跟踪(untracked,新文件)或 已修改(modified,修改过的文件)。
- 你所有的编辑操作(用代码编辑器写代码)都发生在这里。
- 暂存区:
- .git/index,用于临时存放你的改动,通过git add暂存工作区修改后的文件
- 允许你分批提交:你可以只选择工作区中的部分修改进行暂存,而不是一次性提交所有修改。
- 暂存区中的文件状态是 已暂存(staged)。
- **暂存区的价值:**允许更精细地控制提交细粒度。例如需要修复bug-A和bug-B,修复好bug-A后先提交暂存区,等所有bug都修复后再提交,而非修一个bug提交一次。
- 本地仓库:.git/objects,包含完整的项目里是和元数据,是git存储代码和版本的主要位置
- 远程仓库
⽂件状态
- 未跟踪(Untracked)未通过 git 管理的文件
- 已修改(Modified)修改了但是没有保存到暂存区的⽂件
- 已暂存(Staged) 修改后已经保存到暂存区的⽂件
- 已提交(Committed)把暂存区的⽂件提交到本地仓库后的状态
配置命令
配置用户名邮箱
git config --global user.name [用户名称]git config --global user.email [用户邮箱]其中--global处
- 若省略则为本地,只对本地仓库有效
--global,全局配置,对所有仓库有效--system,系统配置,对所有用户有效,一般不使用
查看配置
git config --global --list基础命令
初始化:省略project-name则在当前⽬录创建 ,创建完成后目录中会生成.git文件
git init <project-name>检查仓库
git status // 查看状态
git log // 查看提交日志git log --onelinegit log --gragh --oneline --decorate --all
git ls-files // 查看暂存区文件查看修改内容
git diff // 比较工作区和暂存区之间的差异git diff HEAD // 比较工作区和版本库之间的差异git diff --cached // 比较暂存区和版本库之间的差异
git diff [hash1] [hash2] // 比较两个提交or分支之间的差异git diff HEAD^ HEADgit diff HEAD~2 HEAD
git diff [hash1] [hash2] [fileName] // 比较某个文件在两个提交之间的差异远程仓库
git remote -v // 列出所有关联的远程仓库git remote add/remove // 管理远程仓库git clone // 克隆远程仓库操作一图流-时序图
sequenceDiagram
participant WD as 工作区<br/>Working Directory
participant SA as 暂存区<br/>Staging Area/Index
participant LR as 本地仓库<br/>Local Repository
participant RR as 远程仓库<br/>Remote Repository
Note over WD,RR: 提交代码流程
WD->>SA: git add
SA->>LR: git commit
LR->>RR: git push
Note over WD,RR: 更新代码流程
RR->>LR: git clone/fetch/pull
LR->>WD: git checkout/merge
Note over WD,LR: 撤销操作
SA->>WD: git restore --staged
LR->>WD: git reset --hard
LR->>SA: git reset --mixed
LR-->>LR: git reset --soft
LR->>LR: git revert子图:
git rm取消追踪并删除工作区文件,--cache仅取消追踪git clean清理工作区所有未跟踪文件
sequenceDiagram
participant WD1 as 工作区-未跟踪<br/>Untracked
participant WD2 as 工作区-已跟踪<br/>Tracked
WD1->>WD2: git add
Note over WD1,WD2: 移除文件
WD2->>WD1: git rm
WD2-->>WD1: git rm --cache
WD1->>WD1: git cleangit reset三种模式,使用场景
- soft:想修改最后一次提交的信息或内容,然后重新
git commit - mixed:想撤销提交,但重新选择哪些文件提交,或修改提交内容
- hard:完全放弃最后一次提交及其所有修改
sequenceDiagram
participant WD as 工作区<br/>Working Directory
participant SA as 暂存区<br/>Staging Area/Index
participant LR as 本地仓库<br/>Local Repository
participant LR2 as 上个版本<br/>HEAD~1
Note over WD,LR2: Git Reset 三种模式的影响范围
rect rgb(200, 220, 240)
Note over WD,LR2: git reset --soft HEAD~1
LR-->>LR2: 移动 HEAD 指针
Note right of LR: 暂存区不变<br/>工作区不变
end
rect rgb(220, 240, 200)
Note over WD,LR2: git reset --mixed HEAD~1 (默认)
LR-->>LR2: 移动 HEAD 指针
LR->>SA: 重置暂存区
Note over WD,SA: 工作区保留修改,暂存区还原为HEAD~1
end
rect rgb(240, 200, 200)
Note over WD,LR2: git reset --hard HEAD~1
LR-->>LR2: 移动 HEAD 指针
LR->>WD: 重置工作区
LR->>SA: 重置暂存区
Note over WD,SA: ⚠️ 工作区与暂存区均还原为HEAD~1<br/>不可恢复
end忽略文件
在仓库目录配置 .gitignore 文件,可配置哪些文件无需版本控制。
以下文件需要忽略:
- 日志文件
- 编译产生的中间文件,例如 .class .o
- 涉及敏感信息的文件
配置语法:
# 使用sharp符号注释*.txt # 忽略所有拓展名为txt的文件!lib.txt # 但不包括lib.txt/doc # 仅检查doc文件夹之前的进行忽略,不忽略doc文件夹tmp/ # 忽略tmp目录下所有分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 230 天
部分内容可能已过时