• Home
  • 归档
文章检索 作品与友邻 关于我
暴君乔博客
Home 归档

git详解【使用以及原理】

发布于: 2018-09-14
更新于: 2023-07-09
文章目录
  1. git
    1. 版本控制系统
    2. **总结 :simle: **
    3. git 知识【只针对 git 进行讲解】

git

本文以平时工作经历+pro git 书籍内容进行阐述,算是做个学习笔记。

版本控制系统

  • 本地版本控制系统

    Mac OS X 系统上通过 rcs 命令进行保存并且管理文件补丁,补丁记录着对应文件修订前后的变化

  • 集中化版本控制系统

    类似于 CVS,Subversion,Perforce 之类的,主要核心在于有一个核心服务器负责管理所有文件的修订版本。

  • 分布式版本控制系统

    Git、Mercurial、Bazaar 之类的,客户端不只提取最新的文件版本,而且把 repository 全部克隆下来

**总结 :simle: **

种类 优点 缺点 特点
本地版本 简单,单机部署 不适合多人操作 使用补丁形式记录文件信息
集中化 容易管理,易于掌握其他人进度 但若服务器宕机,则服务中止,且易于丢数据,无法协同工作 记录各个文件的差异
分布式 即便服务器故障,也可以轻松 commit 或者回滚历史,操作方便,只要操作完后再 push 到 repository 即可,且即便服务器挂了,也可以上传本地 项目镜像庞大 把变化的文件做一次快照,不变的则指向上一个快照的,类似于文件系统

git 知识【只针对 git 进行讲解】

状态

  • committed 已提交

    数据已存放在本地数据库中

  • modified 已修改

    修改但未保存

  • staged 已暂存

    把已修改的文件放在下次提交时要保存的清单中

  • untracked 未跟踪

    不想要加入 git 的,创建.gitingnore 文件,按照正则匹配模式设置一下即可

使用【安装略】

git config --global user.name "tyrantqiao"
git config --global user.email "[email protected]"

若不用 global 则设定保存在当前项目的.git/config 下

  • 查看提交情况

git log -p -2 --stat --pretty

  • 按照文件名的形式查看

git log
git show --name-status hash_id

  • 修改最后一次更改情况

git commit --amend

git 存储数据

例如有 test.log 文件,执行git add test.log将 test.log 添加到暂存区中,这时会对文件进行校验和(SHA-1 哈希字符字串)然后将当前版本的文件快照保存到 git 仓库中【快照以 blob 的形式存储下来】其后将校验和加入暂存区域。

当执行git commit时,git 先计算每一个子目录的检验和,再将目录存为树对象,之后 git 创建提交对象,加上那些作者信息等等,包含指向树对象【根目录】的指针,这样就可以到时再回滚回来。

对象也就有: blob【test.log】 tree【根目录加子目录】 tree【根目录】

分支

  • master 默认分支
  • head git 系统的当前分支
  • 合并分支问题:
    • fastforward master->hotfix 合并时,直接将两个指针指向 hotfix 的快照即可,而当操作完成后,即可以删除掉无用的分支例如 hotfix
    • 分岔分支的合并:自动合并,且若有冲突时,需要解决,或者可以加上 force 的命令
  • 分支模式种类
    • 长期分支: 拥有多个开放的分支,各个分支负责特定的任务,对于大型项目时这种易于管理,像可以分为基础,前端,后端,bug 分支等等。
    • 特性分支【topic】:一个短期的,用来实现单一特性与其相关工作的分支,可以理解为一个任务的多种实现,然后在其中抉择较好的任务进行选择。

冲突解决以及什么是 merge

  • 冲突

    简单来说就是线上 git 仓库与本地 git 仓库在一些代码上有冲突的地方【都有改动】,而 git 无法得知哪种是正确的,所以 git 会爆出需要解决冲突

常见情况:

  1. v1->v2->v3-> 【有问题的 v4】,然后主环境回退到 v3,开发人员对 v4 进行修复 bug,建立了 v4->hotfix,完成修复后,merge master 指针和 hotfix,再后面将分支合并回来。
  2. 或者像提交前忘记拉代码,git 自动做了 merge 操作,因为开发上不涉及到冲突操作,所以常发生 merge 操作

那么冲突呢?

  1. 添加时勿将别人的代码添加进去,像格式化等都会导致文件的变化。
  2. 公共代码的修改,大家的版本不一致导致冲突

解决方案:

  1. 备份本地代码,删除掉 git 仓库内代码,拉取最新的代码,并添加上自己的内容上去。
  2. 使用 git 工具,快速将线上的代码依次合并上本地代码内来解决冲突,IDEA 等可以实现
  3. 线上的不要了,那就将本地的代码直接 push 上去
git详解【使用以及原理】
/archives/34b0f784/
作者
tyrantqiao
发布于
2018-09-14
更新于
2023-07-09
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • 技术
  • Git

扫一扫,分享到微信

微信分享二维码
git详解【使用以及原理】
Java面经_2018
© 2026 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 文章检索
  • 作品与友邻
  • 关于我

展开标签

  • 随笔
  • 旅行
  • Java
  • 面经
  • 源码
  • 架构
  • Hadoop
  • 计算机网络
  • 技术
  • IDEA
  • maven
  • JDK
  • Linux
  • MySQL
  • 性能
  • 数据库
  • Redis
  • MQ
  • Spring
  • SquirrelFin
  • 记账
  • Android
  • 个人财务
  • TIDB
  • unity
  • chatgpt
  • 前端
  • Vue
  • Git
  • shadowsocks
  • Hexo
  • 问题排查
  • 业务
  • JVM
  • 算法
  • nginx
  • ssh
  • Python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 表达
  • 运动
  • mybatis
  • 域名
  • AI
  • 产品
  • 家装
  • 土巴兔
  • github
  • 软件
  • 个人项目
  • Leaves
  • 幽默
  • 穿搭
  • 画画
  • 缓存
  • 摄影
  • 设计模式
  • c
  • 课程设计
  • 调酒
  • 数学

Collection

作品与友邻

我做的小工具、朋友的站点和一些长期值得回访的灵感来源。

  • 土 土巴兔 AI 导购交互演示 可点击体验用户导购、平台运营、装修公司、材料商及 AI 话术知识库的多端增长流程。 /demos/tubatu-ai-guide/
  • L Leaves 行程记录 我做的行程记录页面小工具,用来沉淀旅行路线、日程安排和途中的灵感。 https://leaves.tyrantqiao.com/
  • 本 本网站主题yilia设计者的主页 http://litten.me/
tyrantqiao的头像

tyrantqiao

github rss qq mail facebook linkedin

About

关于我

代码、海浪和持续折腾,都是生活的一部分。

<div class="aboutme-card"> <p class="aboutme-eyebrow">tyrantqiao</p> <h3>Java 全栈开发</h3> <p>常年和 Java、后端服务、前端工程、数据与部署打交道,喜欢把复杂问题拆开、写清楚,也把踩坑过程整理成文章留给后来的人。</p> <div class="aboutme-tags"> <span>Java</span> <span>Full Stack</span> <span>Backend</span> <span>Frontend</span> <span>Extreme Sports</span> </div> <p>工作之外偏爱冲浪等极限运动,享受在浪上找平衡,也享受在代码里找边界。</p> <div class="aboutme-contact"> <a href="mailto:[email protected]">Gmail</a> <a href="mailto:[email protected]">QQ Mail</a> </div> </div>