Java技术八股学习Day36

Git

版本控制核心概念

(1)定义与价值

版本控制是记录文件 / 项目内容变化的系统,支持回溯历史版本、对比修改差异、定位问题根源,适配个人开发与团队协同场景。

(2)三类版本控制系统
  • 本地版本控制系统:基于本地数据库记录文件差异,仅支持单人使用,存在数据丢失风险;
  • 集中化版本控制系统(CVCS):通过中央服务器存储所有版本,支持多人协同,但存在单点故障、需联网工作的问题;
  • 分布式版本控制系统(DVCS):客户端完整镜像仓库,无需联网即可工作,任意客户端可恢复服务器数据,Git 是典型代表。

Git 核心认知

(1)Git 简史

由 Linux 内核团队开发,因 BitKeeper 合作终止,基于其经验教训打造,专注高效、分布式协作。

(2)与其他版本系统的核心区别
  • 其他系统:以 "文件变更列表" 存储(记录文件增量差异),需累积差异计算最终版本,效率随增量增多下降;
  • Git:以 "快照流" 存储,每次提交保存全部文件快照,未修改文件仅保留链接,高效且直观。
(3)Git 三大状态与工作区域
  • 三大状态
    • 已修改(modified):文件已改动,未存入本地数据库;
    • 已暂存(staged):标记已修改文件,纳入下次提交快照;
    • 已提交(committed):数据安全存入本地数据库。
  • 三大工作区域
    • 工作目录(Working Directory):本地编辑文件的区域;
    • 暂存区域(Staging Area):临时存放待提交快照的区域;
    • Git 仓库(.git directory):存储所有版本数据的核心区域。
  • 核心工作流程:工作目录修改 → 暂存文件 → 提交到仓库。

Git 快速入门操作

(1)获取 Git 仓库
  • 初始化本地仓库:进入项目目录执行 git init,生成 .git 子目录;
  • 克隆远程仓库:git clone [远程仓库URL],自定义本地仓库名:git clone [URL] 自定义名称
(2)记录更新到仓库
  • 查看文件状态:git status
  • 暂存文件:git add 文件名(单个文件)、git add *(所有文件)、git add *.txt(指定类型文件);
  • 忽略文件:创建 .gitignore 文件,写入无需版本控制的文件 / 目录规则;
  • 提交更新:git commit -m "提交说明"(需先暂存),git commit -a -m "说明"(跳过暂存,直接提交已跟踪文件);
  • 移除文件:git rm 文件名(从暂存区和工作目录删除);
  • 重命名文件:git mv 原文件名 新文件名(等价于移动 + 删除原文件 + 暂存新文件)。
(3)提交消息规范
  • 标题行:一句话概括提交核心内容;
  • 主体部分:补充背景、解决的问题,换行分段,避免长句,便于日志查看。
(4)远程仓库操作
  • 关联远程仓库:git remote add origin [远程服务器URL]
  • 推送本地改动:git push origin 分支名(如 git push origin master);
  • 远程仓库重命名:git remote rename 旧名 新名
  • 移除远程仓库:git remote rm 仓库名
(5)查看提交历史
  • 基础命令:git log(按时间倒序显示提交记录);
  • 筛选记录:git log --author=用户名(查看指定用户提交)。
(6)撤销操作
  • 修正最近提交:git commit --amend(补充文件或修改提交信息);
  • 取消暂存:git reset 文件名
  • 撤销文件修改:git checkout -- 文件名(恢复到最近提交状态);
  • 丢弃本地所有改动:git fetch origin + git reset --hard origin/master(同步远程最新版本)。

Git 分支操作

(1)分支核心用途

隔离特性开发、bug 修复等工作,完成后合并到主分支,避免影响主干代码。

(2)常用分支命令
  • 创建分支:git branch 分支名
  • 切换分支:git checkout 分支名
  • 创建并切换分支:git checkout -b 分支名(等价于创建 + 切换命令);
  • 合并分支:git merge 待合并分支名(需先切换到目标分支,可能出现冲突);
  • 删除分支:git branch -d 分支名
  • 推送分支到远程:git push origin 分支名(让他人可见该分支)。
相关推荐
知识分享小能手几秒前
Flask入门学习教程,从入门到精通, 认识Flask路由 — 知识点详解 (2)
python·学习·flask
清平乐的技术专栏5 分钟前
【Flink学习】(六)Flink 三大时间语义 + 水位线 Watermark
大数据·学习·flink
楼兰公子14 分钟前
《深入理解Linux网络技术内幕》配套学习大纲 + 源码Demo + 进阶实战实例
linux·arm开发·学习
楼田莉子14 分钟前
C++17新特性:结构化绑定/inline变量/if相关的变化
c++·后端·学习
AI算法沐枫40 分钟前
大一学生如何入门机器学习,深度学习,学习顺序如何?
人工智能·python·深度学习·学习·线性代数·算法·机器学习
他们叫我阿冠1 小时前
实习前自我培训-Day2学习
学习
wuxinyan1231 小时前
工业级大模型学习之路020:LangChain零基础入门教程(第三篇):提示词工程与提示模板系统
人工智能·python·学习·langchain
Hua-Jay1 小时前
OpenCV联合C++/Qt 学习笔记(二十二)----相机模型与投影及单目相机标定
c++·笔记·qt·opencv·学习·计算机视觉
咸甜适中1 小时前
rust语言学习笔记Trait(七) IntoIterator(由集合创建迭代器)
笔记·学习·rust
qq_525513752 小时前
第七章 指令微调学习(三)为指令数据集创建数据加载器;加载预训练的大语言模型
人工智能·学习·语言模型