Git - Git内部原理解析 | 解决git版本冲突

学一门语言或者技术,基本的过程是了解到熟悉掌握,再到剖析原理,原理对于理解是很有帮助,而且是巨大的,我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认为这些内容对于初学者来说可能难以理解且过于复杂。

从根本上来讲 Git 是一套内容寻址 (content-addressable) 文件系统,是一个简单的键值对数据库(key-value data store),我们用一个文件来保存 SHA-1 值,并给文件起一个简单的名字,然后用这个名字指针来替代原始的 SHA-1 值,对比快照,生成新版本的SHA-1数值,如下图:
这里写图片描述

Git的有点在于可以,时刻保持数据完整性,保持版本的独立性,不受其他的分支所影响,Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,原理如下图:

这里写图片描述

这是 Git 同其他系统的重要区别。它完全颠覆了传统版本控制的套路,并对各个环节的实现方式作了新的设计。Git 更像是个小型的文件系统,但它同时还提供了许多以此为基础的超强工具,而不只是一个简单的 VCS。

Git还有一个点在本地处理数据,没有过分依赖于网络,Git 可以通过两种主要的方式在版本库之间传输数据,dumb和smart协议两种。

下面举一个版本之间冲突的解决方法:(zhangyu_demand_tag -> sim)

git checkout sim (切换到sim分支)
git checkout -b sim_copy(sim复制一个分支)
git branch(查看本地分支绿色为本地分支)

这里写图片描述

git pull origin sim (更新代码,保证当前为最新分支 相当于svn up 命令)
git merge –no-ff zhangyu_demand_tag(合并分支,显示失败,合并中灵魂的一句命令)


备注:–no-ff指的是强行关闭fast-forward方式。fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
git merge –squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。

–no-ff:不使用fast-forward方式合并,保留分支的commit历史
–squash:使用squash方式合并,把多次分支commit历史压缩为一次


这里写图片描述

git status (查看冲突中的文件)

这里写图片描述
在Unmerged paths 里,显示的是冲突的文件名,解决冲突,合并

这里写图片描述

有不明白的同学可以,私信我,看见第一时间回复~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stark张宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值