当前位置: 首页 > article >正文

Git旧文件覆盖引发思考

一天,我的同事过来找到我,和我讲:张叫兽,大事不好,我的文件被人覆盖了。git是真的不好用啊

git不好用?文件被覆盖;瞬间我似乎知道了什么,让我想到了某位男明星的语法:他一定是犯了全天下git初学者都会犯的错误。

一了解,果不其然

先说结论:git拉取,如果发生冲突,尽量保证Stage空间文件都提交

下面我们把这起事故的全流程给大家唠唠哈:

  1. 首先小红和小王都是基于commited 100的提交来做开发
  2. 开始小红对于README.md文件以及test.c文件都做了修改,然后提交并提到了git服务器(Gitea/Gitee/Github/GitLab)
  3. 咱们回头再来看小王,小王基于commit 100,对于test.c做了修改,很明显,test.c文件push将会发生冲突;
  4. 提交本地没问题,push的时候失败,于是通过git pull命令,来去最新代码,解决冲突
  5. 前方高能!!!合并的时候,已经列出了README.md在Stage区(也就是Git的暂存区),但是,基于SVN的历史经验,小王觉得自己没有修改README.md,然后果断的放弃了修改,只是提交了test.c文件
  6. 然后就是推送的git 远程服务器
  7. 此时小红再次拉取新代码,发现自己之前对于README.md的修改丢失了

为什么会这样?

从好理解的角度来看,大家可以理解为,每次push行为是将要让远程服务器的“所有的”文件内容和本地分支的内容,完全一样

那么,git是怎么做到这一点的呢?因为merge操作是一种特殊的提交,对于普通的提交,只是会记录local分支的提交内容:

他会记录本地仓库合并后的文件和合并双方的差异(本地分支原来的文件,以及拉取分支之间的差异),所以当你把这个merge的commit推送到了Git服务器之后,Git的原则就是提交方为大,对于有差异的地方,按照提交方为准。所以就小王的push之后,将自己本地旧版的README.md文件成功的错误的推送到了git服务器。


http://www.kler.cn/a/412099.html

相关文章:

  • java:aqs实现自定义锁
  • 英伟达推出了全新的小型语言模型家族——Hymba 1.5B
  • Windows下安装FreeSurfer教程
  • 嵌入式系统与OpenCV
  • Spring源码(十三):Spring全系列总结
  • 卷积神经网络学习记录
  • Day 27 贪心算法 part01
  • 排序算法(六)--堆排序
  • Linux17 Git 指令
  • NIO三大组件
  • OpenAI 是怎么“压力测试”大型语言模型的?
  • C#中面试的常见问题005
  • 【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数
  • 探索Python自动化新境界:Helium库揭秘
  • 三六零[601360]行情数据接口
  • Angular面试题汇总系列一
  • 玩转 Burp Suite (1)
  • 硬菜!高精度!BO-Transformer贝叶斯优化编码器多特征分类预测/故障诊断
  • 【jupyter】linux服务器怎么使用jupyter
  • Android 网络通信(三)OkHttp实现登入
  • 【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
  • java-使用HSSFWorkbook编辑excel文件
  • 《Hello YOLOv8从入门到精通》5,颈部网络(Neck)结构、核心源码和参数调优
  • 用 C++ 写一个 AWS Lambda Hello World
  • zabbix“专家坐诊”第265期问答
  • 【AI系统】Tensor Core 架构演进