git知识点总结

一、Git 基础核心

1. 起源与定位
  • 诞生背景:2005 年由 Linus Torvalds 为解决 Linux 内核代码管理问题开发,替代 BitKeeper(因协议冲突被收回授权)。
  • 核心定位:分布式版本控制系统,优于集中式 VCS(CVS、SVN),无单点故障,支持离线操作。
  • 发展里程碑:2008 年 GitHub 上线,推动 Git 成为开源项目首选版本控制工具。
2. 核心特性
  • 分布式架构:每个本地库都是远程库的完整镜像,支持独立开发,服务器故障可通过本地库恢复。
  • 快照式存储:不记录文件内容差异,直接保存每次提交的完整文件快照,未修改文件仅保留指针链接,提升性能。
  • 本地优先设计:日志查看、版本对比、提交等操作均无需联网,依赖本地数据库,响应速度快。
  • 分支轻量高效:分支本质是指向提交记录的指针,创建、切换、合并成本极低,支持并行开发。
3. 安装与环境配置
  • 支持系统:Windows、Linux、Mac OS,安装需选择无中文、无空格的路径。
  • 关键配置项:
    • 用户名 / 邮箱:git config --global user.name "xxx"git config --global user.email "xxx"(提交记录的身份标识)。
    • 换行符转换:core.autocrlf(Windows 设为 true,自动转换 LF/CRLF;Unix 设为 input)。
    • 路径环境变量:安装时可选择 "仅 Git Bash 使用""Windows 命令行可用" 等模式。
  • 配置优先级:仓库级(.git/config)> 用户级(~/.gitconfig)> 系统级(Git 安装目录 /etc/gitconfig)。

二、仓库与核心概念

1. 仓库类型与结构
  • 仓库(Repository):
    • 本地库:包含工作区、暂存区、.git 版本库三部分。
    • 远程库:用于团队协作的远程存储(如 Gitee、GitHub、GitLab)。
  • 核心区域:
    • 工作区(Workspace):本地可见目录(除 .git 文件夹外),存放实际文件。
    • 暂存区(Stage/Index):位于 .git/index,临时存储待提交的修改,是工作区与版本库的中间层。
    • 版本库(.git 目录):存储所有版本历史、分支、标签等元数据,不可手动修改。
  • 关键概念:
    • 分支(Branch):默认主分支为 master,可创建功能分支、修复分支等,实现并行开发。
    • HEAD 指针:指向当前所在的分支或提交记录。
    • 提交(Commit):每次提交生成唯一的 SHA-1 哈希值,记录版本快照及提交信息。
2. 基本工作流程
  1. 初始化 / 克隆:本地初始化(git init)或克隆远程库(git clone <url>)。
  2. 本地开发:在工作区修改、新增文件。
  3. 暂存修改:git add <file>git add .(添加所有文件),将修改存入暂存区。
  4. 提交版本:git commit -m "提交说明",将暂存区内容存入版本库,生成新的提交记录。
  5. 远程同步:拉取远程更新(git pull)→ 推送本地修改(git push),完成团队协作。

三、核心命令操作(含场景与示例)

1. 仓库管理命令
命令 功能 示例
git init 初始化本地 Git 仓库 git init testGit(在 testGit 目录创建仓库)
git clone <url> 克隆远程仓库到本地 git clone https://gitee.com/xxx/smart_breeding.git
git remote add <name> <url> 关联远程仓库 git remote add origin https://gitee.com/xxx/xxx.git(origin 为远程库别名)
git remote -v 查看远程仓库关联信息 显示 origin 的 fetch/push 地址
git remote remove <name> 删除远程仓库关联 git remote remove origin
2. 文件操作与状态查看
  • 状态查看:git status(显示工作区、暂存区文件状态,如未跟踪、已修改、待提交)。
  • 暂存与取消:
    • git add <file>:添加单个文件到暂存区。
    • git add .:添加所有新增 / 修改文件到暂存区。
    • git rm --cached <file>:将暂存区文件移除,回归未跟踪状态。
  • 提交与补充:
    • git commit -m "注释":提交暂存区文件到版本库,注释必填。
    • git commit --amend:补充上次提交(未推送时可用)。
  • 差异对比:
    • git diff:工作区与暂存区文件差异。
    • git diff --cached:暂存区与版本库最新提交差异。
    • git diff <commit1> <commit2>:两个提交间的差异。
3. 版本控制与回退
  • 日志查看:
    • git log:显示完整提交日志(作者、时间、哈希值、注释)。
    • git log --pretty=oneline:简洁显示(哈希值 + 注释)。
    • git reflog:显示所有操作记录(含回退前的版本,用于恢复误回退)。
  • 版本回退:
    • git reset --hard HEAD^:回退到上一版本(HEAD^^ 为上上个,HEAD~n 为前 n 个)。
    • git reset --hard <commit哈希值>:回退到指定版本(哈希值可通过 git log 或 reflog 获取)。
  • 文件恢复:
    • git checkout -- <file>:丢弃工作区未暂存的修改(恢复到暂存区或版本库状态)。
    • git restore <file>:替代 checkout 的文件恢复功能(Git 2.23+ 支持)。
4. 删除文件管理
  • 本地删除 + 版本库删除:git rm <file>git commit -m "删除文件"
  • 误删恢复:git checkout -- <file>(文件已提交到版本库时可用)。

四、分支管理(核心协作功能)

1. 分支基础操作
命令 功能 示例
git branch 查看所有分支(* 标记当前分支) git branch(显示 master、dev 等分支)
git branch <name> 创建分支 git branch dev(基于当前分支创建 dev 分支)
git checkout <name> 切换分支 git checkout dev
git checkout -b <name> 创建并切换分支 git checkout -b feature(创建 feature 分支并切换)
git merge <name> 合并分支到当前分支 切换到 master 后,git merge dev(合并 dev 到 master)
git branch -d <name> 删除已合并的分支 git branch -d dev(未合并分支删除失败)
git branch -D <name> 强制删除分支 git branch -D feature(未合并分支也可删除)
2. 分支冲突解决
  • 冲突场景:多分支修改同一文件的同一行内容,合并时触发冲突。
  • 解决步骤:
    1. 合并时 Git 提示冲突文件(如 both modified: A.txt)。
    2. 打开冲突文件,手动编辑冲突区域(删除 <<<<<<<HEAD>>>>>> dev 等标记,保留需要的内容)。
    3. git add <冲突文件>git commit -m "解决分支冲突",完成合并。
3. 分支管理策略
  • 主分支:
    • master/stable:稳定版本分支,用于发布,禁止直接修改。
    • develop:日常开发分支,整合功能分支的修改。
  • 辅助分支:
    • feature 分支:基于 develop 创建,开发新功能,完成后合并回 develop。
    • release 分支:基于 develop 创建,预发布测试,修复 bug 后合并到 develop 和 stable。
    • bugfix 分支:基于 stable 创建,修复线上 bug,完成后合并到 stable 和 develop。

五、进阶功能

1. .gitignore 文件(忽略文件配置)
  • 作用:指定无需 Git 跟踪的文件 / 目录(如日志、编译产物、临时文件)。
  • 格式规范:
    • 空行或 # 开头的行忽略。
    • glob 模式匹配(* 匹配任意字符、? 匹配单个字符、[n-m] 匹配范围)。
    • 目录后加 /(如 logs/ 忽略 logs 目录)。
    • ! 取反(如 !classes/a.class 不忽略该文件)。
  • 常用模板(Java 开发):
    • 忽略编译产物:*.classtarget/build/
    • 忽略 IDE 配置:.idea/*.iml.settings/
    • 忽略系统文件:.DS_StoreThumbs.db
  • 注意事项:.gitignore 仅对未跟踪文件生效,已跟踪文件需先执行 git rm --cached <file> 再配置。
2. Git Stash(临时存储修改)
  • 适用场景:开发中途需切换分支(如紧急修复 bug),但当前修改未完成,暂不提交。
  • 核心命令:
    • git stash:将工作区 + 暂存区的未提交修改存入堆栈。
    • git stash list:查看所有 stash 记录(如 stash@{0}stash@{1})。
    • git stash pop:恢复最近的 stash 记录,并删除该记录。
    • git stash apply <stash@{n}>:恢复指定 stash 记录,不删除。
    • git stash drop <stash@{n}>:删除指定 stash 记录。
3. Tag 标签管理(版本标记)
  • 作用:标记重要版本(如发布版本 v1.0),便于回溯。
  • 标签类型:
    • 轻量级标签:git tag <name>(仅指向提交记录,无额外信息)。
    • 附注标签:git tag -a <name> -m "注释"(含作者、时间、注释,推荐使用)。
  • 核心命令:
    • 查看标签:git tag
    • 推送标签:git push origin <tag名>(单个标签)、git push origin --tag(所有标签)。
    • 拉取标签:git pull(自动拉取远程标签)。
    • 删除标签:本地 git tag -d <tag名>,远程 git push origin :refs/tags/<tag名>
    • 基于标签创建分支:git checkout -b <branch名> <tag名>(用于版本补丁开发)。

六、远程协作与平台使用

1. 远程仓库交互命令
  • 推送修改:git push <remote> <branch>(如 git push origin master,第一次推送加 -u 关联分支)。
  • 拉取更新:git pull <remote> <branch>(等价于 git fetch + git merge,自动合并远程更新)。
  • 查看远程分支:git branch -a(显示本地 + 远程分支,远程分支前缀为 remotes/origin/)。
  • 关联远程分支:git checkout -b <本地分支名> origin/<远程分支名>(拉取远程分支并关联)。
  • 删除远程分支:git push origin --delete <branch名>
2. 多人协作流程
  1. 克隆远程仓库:git clone <url>
  2. 创建本地分支:git checkout -b feature(基于 develop 分支)。
  3. 本地开发与提交:git add .git commit -m "xxx"
  4. 拉取远程更新:git pull origin develop(避免冲突)。
  5. 推送本地分支:git push -u origin feature
  6. 提交 Pull Request(PR):通过平台(GitHub/Gitee)申请合并到 develop 分支。
  7. 冲突处理:若推送失败,拉取远程更新后手动解决冲突,再重新推送。
3. 平台使用(GitHub/GitLab)
  • GitHub 操作:
    • 注册账号 → 创建仓库(公开 / 私有)→ 关联本地库 → 推送 / 拉取代码。
    • 配置 SSH 密钥:ssh-keygen -t rsa -C "邮箱",将公钥(id_rsa.pub)添加到 GitHub,免密码推送。
  • GitLab 操作:
    • 安装(CentOS 系统):通过 RPM 包安装(yum localinstall gitlab-ce-xxx.rpm),配置 external_url 后启动(gitlab-ctl reconfigure)。
    • 汉化:克隆中文汉化包,覆盖原文件后重启。
    • 核心命令:gitlab-ctl start/stop/restart(启动 / 停止 / 重启服务)、gitlab-ctl status(查看状态)。

七、工具集成

1. 图形界面工具
  • gitk:内置图形化日志查看工具,仓库目录下执行 gitk,可可视化分支合并历史。
  • git gui:内置图形化操作工具,执行 git gui,支持暂存、提交、推送等操作。
2. IDEA 集成 Git
  • 配置 Git:Settings → Version Control → Git,指定 Git 安装目录下的 git.exe,测试连接。
  • 核心操作:
    • 克隆仓库:VCS → Checkout from Version Control → Git,输入远程地址。
    • 提交修改:右键项目 → Git → Commit Directory,填写注释提交。
    • 分支管理:右下角切换分支,或通过 Git → Branches 操作。
    • 推送 / 拉取:VCS → Git → Push/Pull。
    • 解决冲突:合并分支时,IDEA 会弹出冲突文件编辑界面,可视化解决。

八、常见问题与注意事项

  1. 身份验证失败(HTTPS 方式):Gitee/GitHub 不再支持明文密码,需使用个人访问令牌(Personal Access Token)作为密码。
  2. 推送被拒绝(400 错误):可能是 IP 风控(切换网络)、分支保护(添加白名单)或请求格式异常(重置 Git 配置)。
  3. 分支合并冲突:优先拉取远程更新,手动编辑冲突文件,确保代码逻辑正确后再提交。
  4. 本地库与远程库不一致:执行 git pull --rebase 同步远程更新,避免产生多余的合并提交。
相关推荐
samLi062032 分钟前
【数据集】中国杰出青年名单数据集(1994-2024年)
大数据
成长之路5141 小时前
【数据集】分地市旅游收入数据集(2000-2024年)
大数据·旅游
Elasticsearch2 小时前
使用 Elastic Agent 混合摄取加速 Otel 采用
elasticsearch
大厂技术总监下海2 小时前
用户行为分析怎么做?ClickHouse + 嵌套数据结构,轻松处理复杂事件
大数据·数据结构·数据库
大厂技术总监下海2 小时前
大数据生态的“主动脉”:RocketMQ 如何无缝桥接 Flink、Spark 与业务系统?
大数据·开源·rocketmq
2501_933670792 小时前
2026年中专大数据专业可考取的证书
大数据
W***r262 小时前
SpringBoot整合easy-es
spring boot·后端·elasticsearch
oMcLin2 小时前
如何在Ubuntu 22.04 LTS上优化PostgreSQL 14集群,提升大数据查询的响应速度与稳定性?
大数据·ubuntu·postgresql
信创天地2 小时前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务
それども2 小时前
ES KQL 支持词频统计吗
elasticsearch