git - 为什么 git 隐形合并和复制代码?
问题描述
昨天,我将一个本地开发分支合并到我本地的 master 分支,之后我打算推送到远程 master。我从 git bash 运行 git 命令,然后切换到 Visual Studio 来处理合并冲突。
我的第一个线索是错误的,有多个合并冲突突出了大块代码,其中实际上存在零差异。传入分支上的文本突出显示也神秘地消失了,我最初认为这是我不小心更改或更新的设置,但考虑到其他一切,也许它是相关的。
然后我注意到一个字符串abcd
在主abcd - efg
分支和传入分支中的实例,它只是......隐形合并。它没有标记冲突并询问我想要哪个;它只是默默地选择保留哪个(并选择了错误的启动)。
然后我注意到if
在合并中重复了一段代码。在对所有这些事情进行故障排除的过程中(在我注意到重复之前),我将分支合并到另一个本地分支以查看相同的问题是否仍然存在,并且该if
块出现了 3 次,因此每个重复一次合并。如果不清楚我的意思是什么:
预合并:
// code
if (condition)
{
// do things
}
// code
合并后:
// code
if (condition)
{
// do things
}
if (condition)
{
// do things
}
// code
然后我发现了另一个隐形合并的例子:变量名的改变。在一个分支中,它都是小写的,在另一个分支中,它是 camelCase,它只是默默地在变量声明和使用camelCase 的地方选择了小写版本。
然后我发现了另一个重复,但这次是整个函数。我什至把它放在一个文本比较器中以确保它们是相同的。请注意,此重复和if
块重复位于原始的后续行中。
正如你可以想象的那样,我对这一点感到非常困惑。这不是正常的 git 行为。我的 git 还不错,我的同事甚至更好,而且我们都处于“什么是真正的 ****”阶段。然后今天早上我来上班,希望它在一夜之间神奇地解决(剧透警告:它没有),并发现另一个重复的函数,但这个函数与原始函数有很多代码分开,而不是紧随其后。诡异的。所以我开始比较它们并意识到重复确实是该功能的旧版本。从几周前开始。之间有多个提交。
故障排除:重新启动计算机,重新启动 VS,尝试合并到另一个分支,尝试重新安装 git,尝试重新克隆 repo 并将分支与重新安装的 git 合并。奇怪的行为持续存在。我尝试在谷歌上搜索关于隐形合并的信息,但成功有限,以及关于复制的信息,但没有一个答案与我的问题相符。
怎么了?!为什么会这样?!我该怎么办?请帮忙!
解决方案
您是否尝试过使用 git rebase 而不是 git merge?它将向您显示冲突,这可能就是正在发生的事情。我可以保留两个副本并复制它。
推荐阅读
- angular - 如何使用不是默认的角度 cli 示意图?
- c++ - 如何在 Win32 控制台应用程序中注册不可见的窗口类?
- javascript - Vue js使用相同的选择保持前一个元素打开
- mysql - 如何从多对多表中获取这些行,其中精确列中包含 0?
- python - 安装 Pygame 时遇到问题
- coldfusion - QueryFilter() 返回coldfusion2016中的结构数组。但它应该返回查询
- python - 如何在熊猫重叠中绘制多个时间间隔?
- flutter - FAILURE:构建失败并出现异常。(对于颤振)
- python - 如何停止覆盖已经写过一次的python列表中的索引号?
- docker - 如何拉取 JDK 和 TOMCAT 的基本映像来为我的应用程序构建映像