他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件

2023-12-13

我已经重命名了一个目录并将其合并到我的主分支中,当合并另一个分支时,git 将重命名的目录中的相同文件识别为新文件。

当合并到另一个分支时,我得到该目录中相同文件“由他们添加”的合并冲突:

added by them: theirDir/same_file_name.xxx

我已重命名他们分支中的目录以匹配并继续遇到“由他们添加”冲突。

当我尝试结帐时——我们的我得到了

$ git checkout dir/same_file_name.xxx --ours

error: path 'dir/same_file_name.xxx' does not have our version

此时实际删除这个文件,合并完成后删除该文件。

我该如何解决这个冲突?

--- m ----\ ------------  m1 --------------- mx ------- *!*
     \     \            /   \                /         /  
      \     dir-rename-/     file_revisions-/         /
       \                                             /
        f2 ---------- file added by them conflict --/

在合并冲突之前,已发生来自多个分支的多个文件修订。


不要使用 msysgit 1.9.5,而是尝试适用于 Windows 的最新 Git:

从 Git 2.18 开始, git status更好地检测重命名(文件和文件夹)


使用 Git 2.33(2021 年第 3 季度),它将更进一步,管理基于内容的重命名检测and目录重命名检测。

但仅限于新的合并策略ORT ("表面上递归的双胞胎").

See commit 3585d0e, commit a492d53, commit 806f832 (30 Jun 2021) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit d3b88be, 16 Jul 2021)

merge-recursive:处理重命名为自身的情况

Reported-by: Anders Kaseorg
Signed-off-by: Elijah Newren

目录重命名检测可能会导致传递重命名,例如如果历史的两个不同方面各做一半:

A/file -> B/file
B/     -> C/

然后目录重命名检测传递重命名给我们

A/file -> C/file

然而,当 C/ == A/ 时,请注意,这给了我们

A/file -> A/file.

合并递归假设任何重命名D -> E将有D != E.
虽然这几乎总是正确的,但上面的情况是一个特殊情况,但事实并非如此。
因此,我们不能执行诸如删除重命名源之类的操作,我们不能假设路径 E 中存在的文件意味着重命名/添加冲突,并且我们必须小心输出中最终出现的阶段。

这个改变感觉有点hackish。
令人惊讶的是,我花了很多时间才找到,并且考虑到合并递归的设计导致它尝试枚举边缘和角落情况的所有组合,并为每个组合提供特殊代码,我担心如果我们可以的话,其他地方还需要其他类似的修复提出正确的特殊测试用例。
也许审计可以排除这种可能性,但我没有精力。
merge-recursive 应该消亡,而且由于它无论如何都会被淘汰,因此狭隘地修复这个特定的错误必须足够好。


Git 2.35(2022 年第一季度)修正了 ort 合并策略中的一个极端情况错误。

See commit d30126c (28 Dec 2021) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit 2c54104, 10 Jan 2022)

merge-ort:修复重整化和重命名/删除冲突的错误

Reported-by: Ralf Thielow
Signed-off-by: Elijah Newren
Reviewed-by: Derrick Stolee

自从提交a492d53 (merge-ort:确保我们查阅 df_conflict 和 path_conflicts,2021-06-30,Git v2.33.0-rc0 --merge列于batch #5) (“merge-ort:确保我们协商df_conflict and path_conflicts",2021-06-30),当重新规范化处于活动状态并且文件涉及重命名/删除冲突但文件未修改(无论是在重新规范化之前还是之后)时,merge-ort 会遇到断言失败。

在提交之前(或者如果断言被编译出来),merge-ort 会错误合并,忽略重命名/删除冲突,只删除文件。

删除断言,适当修复代码,在代码中留下一些好的注释,并针对这种情况添加测试用例。


Git 2.38(2022 年第 3 季度)修复了长期存在的极端情况错误目录在合并或策略中重命名。

See commit 751e165, commit 3ffbe5a, commit 6dd1f0e, commit 51e41e4, commit 0565cee (05 Jul 2022) by Elijah Newren (newren).
(Merged by Junio C Hamano -- gitster -- in commit e3349f2, 18 Jul 2022)

merge-ort:修复双重重命名和添加/添加冲突的问题

Signed-off-by: Elijah Newren

merge-recursive 和 merge-ort 中都有代码来避免双重传递重命名 (i.e.
一侧重命名目录A/ -> B/,另一端重命名目录B/ -> C/),因为这种组合否则会使添加到的新文件变得混乱A/在第一面并想知道它们最终会进入哪个目录 - 特别是如果有更多重命名,例如第一面重命名C/ -> D/.

在这种情况下,它只是“关闭”高阶传递情况的目录重命名检测。

另一种看待这个问题的方法是,如果一侧目录重命名中涉及的源名称是另一侧文件的目录重命名操作的目标名称,那么我们就避免了双重传递重命名。

(更具体地说,如果目录在一侧重命名D想要重命名侧面的文件E from OLD_NAME -> NEW_NAME,和侧面D已经有一个名为NEW_NAME,和侧面的目录重命名E想要重命名 D 面NEW_NAME -> NEWER_NAME,然后我们关闭目录重命名检测NEW_NAME以防止NEW_NAME -> NEWER_NAME重命名,并最终导致添加/添加冲突NEW_NAME.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件 的相关文章

  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • 如何重命名 MySQL 数据库(更改架构名称)?

    如何快速重命名 MySQL 数据库 更改其架构名称 通常我只是转储数据库并使用新名称重新导入它 对于非常大的数据库来说 这不是一个选项 显然RENAME DATABASE SCHEMA db name TO new db name 做了坏事
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • 如何(重新)命名 pandas 数据框中的空列标题而不导出到 csv

    我有一个熊猫数据框df1带有一个索引列和一系列未命名的值 我想为未命名的系列指定一个名称 到目前为止 我知道的唯一方法是导出到df1 csv using df1 to csv df1 csv header Signal 然后使用以下命令重新
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t

随机推荐

  • 将 rxGlm 转换为 GLM 时出错

    我在将 rxGlm 模型转换为普通 glm 模型时遇到问题 每次我尝试隐藏我的模型时 都会遇到相同的错误 Error in qr lm object lm object does not have a proper qr component
  • 数据网格视图标题网格颜色

    这是一个 VB NET 应用程序 我们在数据网格视图中显示 SQL 语句的输出 我正在使用 NET 2005 我们需要使网格控件上的标题分隔符的颜色与窗体上的 GridColor 的颜色相同 我们尝试查看 DataGridView 控件的所
  • 如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题?

    我确实知道如何做到这一点 这相当简单 问题是它不起作用 这是我用来发布数据的函数 void updateWebsitesUsingParameters NSDictionary parameters AFHTTPRequestOperati
  • Sitecore:打开 HTML 缓存会阻止回发行为

    我有一个带有 ASP 下拉列表的 sitecore 页面 表单上的数据是从下拉列表中选定的值填充的 当下拉列表中的所选项目发生更改时 会触发回发 在回发中 新选定的项目将添加到查询字符串中 并且用户将被重定向 为了可链接性 我最近启用了 H
  • Python Tkinter 使用 PIL 将画布保存为图像

    我有这段代码 可以让用户在画布上绘图并将其保存为jpeg file 正如中提到的这个帖子 我尝试使用 PIL 在画布上和内存中并行绘制 以便我可以将其保存为jpeg代替postscript 它似乎一直有效 直到我发现我用 PIL 保存的一些
  • docx4j 查找和替换

    我有带有一些占位符的 docx 文档 现在我应该用其他内容替换它们并保存新的 docx 文档 我开始于docx4j并找到了这个方法 public static List getAllElementFromObject Object obj
  • 通过转换器绑定每个按钮,使背景颜色变亮

    我想在单击时使按钮背景变亮 所以我做了以下事情
  • 如何修复错误 E0277:不满足特征绑定 `[usize]: std::marker::Sized` ?

    我正在尝试将数组传递给函数 fn my func xs usize gt usize 0 fn main let arr 329 457 657 let res my func inp 我收到错误 error E0277 the trait
  • 如何从 C# 以编程方式控制 Win7 中的麦克风和麦克风增强设置?

    Windows 7 有一些新的音频设置 我无法从我的 C 应用程序中控制这些设置 具体来说 在输入 麦克风 属性中 有一个包含麦克风和麦克风增强滑块的 级别 选项卡 以及一个麦克风静音切换 复选框 我需要以编程方式确保麦克风没有静音 但尚未
  • Grails + GORM:GORM 中默认的 equals() 实现是什么?

    当我做domainObj1 domainObj2Grails 中的对象是按 ID 进行比较的吗 如果不是 它们如何比较 首先 您需要了解 GORM Grails 并没有做任何特别的事情equals 除非你自己实现equals 在您的域类上
  • 摇动动画(3d版)

    我想在错误上使用此动画 如图所示here 如何在wpf中实现这一点 我感觉这应该是多个转换的组合 组合 但是具体是哪些转换以及如何转换 这是一个初学者 mcve或称之为 我的尝试 它很丑陋 甚至与我想要的不接近
  • 将操作添加到操作栏面板

    我想向操作栏添加一个操作 但它在我的操作栏中显示为下拉列表 如何向操作栏添加按钮 我的代码是 menu menu
  • 为什么Python中的像素值会自动变化?

    我正在 VideoCapture 的帮助下从视频中提取帧 提取第一帧 借助 PIL 将帧转换为图像 打印位置 1 1 处的前一个像素值 打印新创建图像的位置 1 1 处的像素值 谁能解释为什么 提取帧的函数 import cv2 from
  • 使用 Dapper,如何将 sql 类型的值作为参数传递?

    我正在尝试使用 dapper 并将我在此处使用 DDL 定义的整数列表传递给存储过程 CREATE TYPE dbo BrandIDSet AS TABLE BrandID INT NULL 我创建了这个存储过程 CREATE PROCED
  • 如何使用 jQuery 从多个事件触发相同的函数?

    有没有办法拥有keyup keypress blur and change事件在一行中调用相同的函数 还是我必须单独执行它们 我遇到的问题是 我需要通过数据库查找来验证一些数据 并希望确保在任何情况下都不会错过验证 无论是键入还是粘贴到框中
  • 在 Python 中使用 SHA256withRSA 数字签名验证失败

    我正在尝试使用离线 aadhaar KYC 验证应用程序的给定证书文件来验证数字签名 该说明在验证文档中给出 读取整个 XML 并将 s xxxx 标记从中分离出来 使用基于 SHA256withRSA 的哈希和加密技术的签名验证算法 s
  • 将二进制文件添加到 Visual Studio 中的资源

    请这听起来可能是新手 但我就是无法让它工作 因为 在 Visual Studio 2012 中将文件 例如 file exe 添加到资源中的步骤是什么 以便我可以使用以下命令找到资源FindResource hInstance MAKEIN
  • 如何在 Json 控制器中渲染部分视图

    如何渲染要在控制器中的 JsonResult 中使用的部分视图 return Json new Html this RenderPartialView EditMovie updatedMovie Message message JsonR
  • 与 glfw3 链接时发生错误[重复]

    这个问题在这里已经有答案了 我最近一直在尝试编译C 代码并且不依赖IDE 我决定使用编辑器和命令行来编写和编译代码 问题是我想制作一个 glfw 应用程序 但是当我链接 glfw3 lib 和 opengl32 lib 时出现错误 a ex
  • 他们添加的 git 重命名冲突 - git 将重命名目录中的相同文件识别为新文件

    我已经重命名了一个目录并将其合并到我的主分支中 当合并另一个分支时 git 将重命名的目录中的相同文件识别为新文件 当合并到另一个分支时 我得到该目录中相同文件 由他们添加 的合并冲突 added by them theirDir same