覆盖场景的模拟
准备环境
<!--[endif]-->
这里有2个本地库,模拟2个人(user1/user2)协助开发
并分别导入IDE中
<!--[endif]-->
2个文件的初始化内容
<!--[endif]-->
user1对2个文件进行编辑提交(push)
<!--[endif]-->
<!--[endif]-->
<!--[endif]-->
此时user1已经修改了2个文件并push到远程库
user2对其中一个文件(a.txt)进行修改
此时user2并不知道user1的提交,他只是在埋头干自己的活。活干完了准备提交了。
修改文件a.txt
<!--[endif]-->
准备提交前首先更新
<!--[endif]-->
发现有冲突
<!--[endif]-->
此时发现该情况,我们目前的做法是:
发现有冲突,首先commit到本地库,从而进行合并
<!--[endif]-->
<!--[endif]-->
此时我们再次进行pull动作
<!--[endif]-->
<!--[endif]-->
发现有一个文件冲突
<!--[endif]-->
解决冲突文件
<!--[endif]-->
把冲突文件add index
<!--[endif]-->
仅选择自己修改的文件进行提交(问题出在这里!!)
<!--[endif]-->
只选择a.txt进行提交,感觉没啥问题,其实问题就处在这里!!
user1更新后发现自己修改的文件被还原了!
<!--[endif]-->
为什么会覆盖
要明白需要了解GIT的工作原理,可能有点深,这里大概说下。
git的版本管理不想svn通过一个版本号递增的形式来维护版本的前后顺序。
git通过版本号通过md5码进行编号,没有顺序,git是通过对象链来维护版本的。
为什么这么设计,这个分布式有关系。
此时在user2 pull时,实际上有merge合并的动作,此时合并有3中情况。
1中发现本地没有commit,直接把远程库的修改合并到本地库中(从日志的角度看本地库没有任何修改)
2: 发现本地库已经有commit了,此时merge把远程库的内容合并到本地库最后的commit中,并做一次提交,此时改commit有2个parent(一个远程库最后的commit、一个本地库最后的commit)。
3:当发现本地库已经有commit了,此时merge时,有发现有冲突,这时合并动作终止。
仅仅把远程库的内容合并到了本地库的工作区中,此时本地库的b.txt还是旧的。所以这个时候还需要手工的进行commit(必须包含b.txt文件,可能这个有点打破svn的使用习惯,该文件并不是我修改的呀?)
如果防止覆盖
正确的解决冲突(保持目前操作)
如果发现冲突,解决完冲突后必须把所有变更全部commit,不能够挑选
为什么要commit自己并没有修改的文件?
因为从远程库中合并的这些内容(b.txt),相对于你本地库的最新commit(最终要push到远程库的)确实算修改了,但相对于远程库的最新commit却没有修改。所有我们合并后的commit会有2个parent commit。
冲突后本地库保持与远程库版本一致(保持目前操作)
如果不想提交我们未修改的文件内容,可以重置下我们的本地库与远程库保持一致。
git reset origin/master (--hard 这个千万不要加)
可视化操作
<!--[endif]-->
采用stash(建议命令行中使用)
在user2编辑完文件后,在pull更新代码的时候如果有冲突,不要把本地的修改
进行commit,而是stash暂存起来,在此pull,然后在还原之前的修改。
这样就避免过多的commit及merge。从逻辑的角度更直观些。
介于该方式会导致文件内容频繁修改,IDE频繁编译效率问题,建议业务人员使用前2种方式。
总结
首先要承认GIT 从功能的角度强与SVN,就看你能否驾驭得了,
感觉像个宝藏需要你慢慢挖掘。
我们之前用的很不顺有很大的原因:拿SVN的经验在使用GIT(这样会搞死你!
),并没有花时间去学习GIT。
当然GIT的概念比较多,要搞清楚弄明白其原理!否则出点问题你就乱了!
相关推荐
1、Git介绍和使用教程,主要针对新手入职快速自学git的使用,也可供大佬面向...3、总页数59页,内容丰富,知识丰富,覆盖面全,包含gitlab为例的开发场景演练,学完并跟着课程中的操作一遍后,基本能掌握git的使用。
这已更新为使用更现代和 人类可读的输出仍然很简洁。 *“git rebase --rebase-merges”取代旧的“--preserve-merges” 选项; 后者现在标记为已弃用。 *使用--recurse-submodules进行克隆时给出的错误消息 已...
*“git fetch”从一组遥控器中获取学会运行的 auto-gc只在最后一次。 *少数Windows构建补丁已经被上流。 *用于读取序列器机器使用的状态文件的代码 对于腐败或陈旧,“git status”已变得更加强大 州档案。 ...
这个项目展示了如何从Storybook收集代码覆盖率(例如,当使用进行视觉回归测试时)以及如何为3种类型的测试创建组合的代码覆盖率报告: 视觉回归测试(/) 单元测试() 集成测试() 您可以查看每种测试的报告,也...
为什么组合比继承好? —— 干净的代码 算法如何估计内存消耗? - 同样在 O() 以及计算复杂度方面 - 设计模式 设计模式:创造型、行为型、结构型 您在项目中使用了哪些设计模式? RecyclerView Adapter 是 Adapter ...
已保存的项目组保留了* .DsnWrk文件扩展名。 数据管理 21617 修改了ActiveBOM中的“过滤器编辑器”对话框UI。 22430 添加了在组件编辑器,资源管理器和ActiveBOM中为托管组件设置制造商零件选择排名的功能。 22653 ...
该项目的目标是预先准备一个React组件,该组件可以包含在网页上,并且在按某些键组合后,它会覆盖网页并打开基于“坦克”的游戏(请参阅: )。 范围定义 以下项目包括 用Tanks的可玩游戏来React组件 基本的游戏功能...
文件夹 Rafael Camargo的图片组合 贡献 安装 。 下载“推荐给大多数用户”版本。...确保您添加的所有代码都包含在单元测试中: npm run test 您可以选择在运行测试后生成覆盖率报告: npm run test -- --coverage
Themable :根据需要通过属性或CSS变量进行覆盖这些原则的结果是,您可以将一组组件插入各种应用程序中。 使UX一致性和开发人员熟悉任何Web项目。 包含一个Yeoman生成器,用于创建满足这些目标的Web组件。快速开始...
- 第六步:设置配置文件 **(将配置文件进行覆盖,此配置文件会按照 `.env` 文件里面定义的进行替换,没有更改的话则使用默认值)** setini - 第七步:开启服务端,等待结果 runtlbb - 使用命令查看服务端运行状态...
使用测试您的考试 这是对ft_printf测试仪PFT的编辑,以适应2019年规则。 该PFT仅包含745个基本标志的测试组合(%cspdiuxX%-0。*)。 添加了测试以覆盖星号和空指针。 您的printf不需要通过所有测试,有些可以...
WarsawJS Workshop#22清单 -项目设置 -在GitHub上创建空仓库 -执行npm init -执行git init -添加.gitignore -使用正确的名称warsawjs-workshop-22-converter -将仓库与GitHub连接 -在GitHub上创建空仓库 -添加基本...
发展指南 一组出色的工程团队的准则... 在该项目的根目录中执行: pip install -r requirements.txt 有关设置这些脚本的信息,请参见文档的“ 部分。 贡献 我们欢迎您的贡献! 有关详细信息,请参见 。 执照 该项目
此有限元研究代码是由AM的数字组的一部分开发,维护和使用的。 主人的覆盖率报告: 管道状态: 为最新版本而制造的车轮(稳定): 最新开发人员版本(测试版): 重要信息:该项目最近已移动。 因此,请通过以下方式...
此有限元研究代码是由AM的数字组的一部分开发,维护和使用的。 主人的覆盖率报告: 管道状态: 为最新版本而制造的车轮(稳定): 最新开发人员版本(测试版): 重要信息:该项目最近已移动。 因此,请通过以下方式...
专案此仓库中的项目主要组织在子目录中。 请参阅下面的此处包含的工具列表。 一套用于以语言运行时为重点的图像“比光速更快”的工具。 -一组工具,用于测试GCP上基于语言的应用程序容器的功能。 基于源的工作流工具...
视觉控制将使用git进行,并由Ethan管理。 后端类和GUI之间将有一个通用接口或中间层,因此同一GUI程序将仅根据参数传递和函数调用而与不同的骰子游戏(到达组件)一起运行。 设置和历史记录(覆盖率组件)将采用JSON...
其他IDEA克隆项目时,注意配置IDEA,gradle,jdk等,保证项目正常运行 Git仓库: 排序算法总结 面试编程题... 剑指Offer编程题目录 二维数组中的查找: 替换空格: 从尾到头打印链表: 重建二叉树: 用两个栈来实现队列:...
在Buildkite上创建项目像往常一样创建项目和步骤,但是您不需要有效的git存储库URL,因为源代码将通过CodePipeline的S3存储桶下载。2.向CodePipeline添加新的自定义类型创建自定义CodePipeline操作类型的唯一方法是
P◎ki◉ Pokio 是一个非社交反馈框架吗? 对于网站。 这个想法是你(开发者)可以从你的读者那里收集数据,而不必传播... 这个想法是,一个项目越有趣,与它互动的人就越多。 作者和贡献者 Pokio 是由@dval 编写的。