git rebase master 功能会产生(重命名/删除)冲突,而 git rebase -i master 功能则不会

2024-01-17

我在使用 git 时遇到了一种奇怪的情况,其中我有一个功能分支修改了一些文件并删除了一个文件“foo.js”。当我通过“git rebase master feature”重新基于master时,我遇到了以下类型的冲突:

CONFLICT (rename/delete): src/main/resources/com/blah/bar.js deleted in Change some js and renamed in HEAD. Version HEAD of src/main/resources/com/blah/bar.js left in tree.

奇怪的是,master 分支和 feature 分支都没有修改过 bar.js,更不用说删除它了。更重要的是,执行“git rebase -i master feature”不会产生冲突(当选择所有“pick”时)。

一个可能的重要线索是 foo.js 和 bar.js 是相似但不完全相同的文件,稍加修改的文件也与 foo.js 和 bar.js 相似。我唯一可以做出的疯狂猜测是,对相关 js 文件所做的一些更改在某种程度上使 git 误以为分支功能中的违规提交包括删除 bar.js,然后重命名 foo.js(这是删除)到 bar.js。这可能/预期吗?有谁知道为什么会发生这种情况?仅供参考,我在 linux mint 16 上使用 git 版本 1.8.3.2。


That is有点不寻常,但你的诊断是正确的。

交互式变基使用一系列git cherry-pick命令。非交互式变基使用git-merge-recursive(至少默认情况下;请参阅git-rebase--merge脚本中的git-core目录,无论它位于系统上的任何位置,或者只需记下-s <strategy>论证git rebase)从旧的提交中进行每一次新的提交。作为文档-m / --merge说(尽管它没有提到这是default):

       Use merging strategies to rebase. When the recursive (default)
       merge strategy is used, this allows rebase to be aware of renames
       on the upstream side.
 
       Note that a rebase merge works by replaying each commit from the
       working branch on top of the <upstream> branch. Because of this,
       when a merge conflict happens, the side reported as ours is the
       so-far rebased series, starting with <upstream>, and theirs is the
       working branch. In other words, the sides are swapped.

You can tell for sure by using git diff -M --name-status1 to compare the suspect commit pair. If this shows bar.js as Deleted and foo.js as Renamed to bar.js, that's the culprit.

令人烦恼的是,无法设置合并的重命名阈值。幸运的是,解决方法只是运行交互式变基并且不对命令系列进行任何更改,您可以通过执行以下操作来简化操作:

GIT_EDITOR=: git rebase -i ...

或通过使用-p保留合并的选项(如果有合并,后者会有所不同,但具有执行“隐式交互式”变基的副作用,它只是设置GIT_EDITOR=:并且还关闭自动挤压)。


1The -M option is not required if you have configured diff.renames to true (see git config documentation https://www.kernel.org/pub/software/scm/git/docs/git-config.html). Merge-recursive internally sets the rename but not copy detection, and sets the "rename limit" the first of whichever of these applies: your configured merge.renamelimit, if you have one; your diff.renamelimit if you have one; or the constant 1000.

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

git rebase master 功能会产生(重命名/删除)冲突,而 git rebase -i master 功能则不会 的相关文章

随机推荐

  • 未找到 ObjectSet 库?

    using System using System Collections Generic using System Linq using System Text using System Data using ModelLayer Poc
  • Javamail中的FolderClosed异常

    我正在尝试在 android 中创建一个简单的邮件客户端 并且我在我的应用程序中编译并运行了 javamail 的 android 版本 但是 每当我尝试连接和接收邮件时 我都会收到如下所示的 文件夹已关闭 异常 10 23 12 12 1
  • Gatsby 在 Netlify 部署上构建失败

    我的网站是使用 Gatsby 构建的 并持续部署到 Netlify 我已经两个月没有碰过我的盖茨比网站了 因此 当我运行更新并添加新内容并部署时 我在 Netlify 构建上遇到了重大错误 尝试了很多事情并花了太多时间 最初我只使用 npm
  • 如何获取Oracle表的最后一行

    我想要获取插入到 Oracle 11g Express 数据库表中的最后一行 我怎样才能做到这一点 表中不存在 最后 行 因为 Oracle 表没有顺序的概念 但是 假设您想找到最后插入的主键and如果这个主键是一个递增的数字 你可以这样做
  • Sublime Text 2 中有汇编语法高亮吗?

    我无法突出显示我的程序集 否 但由于 Sublime Text 2 可以读取 Textmate 语言定义文件 tmLanguage 文件 因此您可以通过复制类似内容轻松添加对 Assembly 的支持https github com fox
  • jquery 可以淡入淡出吗在视频中

    我在 vid html 中有一个 flv 文件 它工作正常 但有什么方法可以让视频本身淡入 淡出吗 div div class video div div 这是行不通的 video hide fadeIn load vid html 将其包
  • Axios Get 请求数据返回“data: ↵ ↵ ↵ ↵”

    我正在使用 Axios 向 Jobs API 站点发出 get 请求 每当我 console log 响应时 我似乎无法使用它 返回的对象是 data 但它看起来像 JSON const url api string content axi
  • 如何制作响应式数据列表asp.net

    我的页面中有一个 Asp net DataList 控件 目前 它的重复列设置为 4 这将为我提供每行 4 列 但我想让它响应并针对较小的屏幕尺寸将值设置为 1 下面是我的 asp net 控件
  • 无法将 ADO.NET 实体数据模型添加到 .NET Core 2.1 项目

    问题 正如标题所示 我已经安装了 NET Core 2 1 SDK https www microsoft com net download windows并创建了一个新的 NET Core 2 1项目 当我去项目 gt 添加项目 gt 数
  • 从 Visual Studio 代码终端找不到 npm

    当我尝试从 VS Code 终端运行 npm 时 收到错误 术语 npm 未被识别为 cmdlet 函数 脚本文件或 可操作的程序 这曾经在我以前的笔记本电脑上运行过 所以看来我缺少配置或扩展 请阅读有关如何在计算机上安装 npm 和 no
  • 在 mvvm 中选择列表框第一项

    我是 mvvm 新手 我的 silverlight 应用程序中有一个列表框 它绑定到视图模型中的可观察集合 我想使列表框选择第一个项目 我厌倦了这个 但它不起作用
  • `tapply()` 返回数据帧

    我有一个包含日期时间 POSIXct 节点 因子 和 c 数字 列的数据集 例如 date node c 1 2011 08 14 10 30 00 2 0 051236000 2 2011 08 14 10 30 00 2 0 08123
  • 不能包含

    我正在使用 Visual Studio 2010 我正在尝试在 OpenGL 中编写简单的 Camera 类 我需要在 Camera h 中包含 gl gl hgl gl h 已包含在 main cpp 中 Camera h 已包含在 ma
  • 需要 Gradle 版本 1.10。当前版本是2.0

    我正在尝试使用最新的 Gradle 版本 2 0 但是在点击时我不断收到此消息梯度构建在终端 为什么要求1 10版本 我是 Gradle 新手 所以我正在努力理解它 需要 Gradle 版本 1 10 当前版本是2 0 这是我的依赖项 模块
  • 如何使android应用程序作为服务器和python作为客户端

    描述 所以基本上我正在构建一个android应用程序 其中我使用kotlin 它将充当服务器 而在客户端 我使用python 我为此目的使用套接字 我必须使用UDP进行通信 但我无法连接到我的 android 应用程序 在 python 脚
  • 在 Nuxt 3 和 Vite 中集成 bootstrap 5

    我正在尝试将 Bootstrap 5 集成到新的 Nuxt 3 项目中 但我遇到了一个无法解决的问题 我想通过仅导入必要的模块 scss 和 javascript 来优化它 如下所述 https getbootstrap com docs
  • 尝试从 ASP.NET Web Api 控制器返回 IEnumerable

    我试图从我的 ASP NET Web Api 控制器返回 IEnumerable 我的 ApiController 中有以下内容 public IEnumerable
  • 单击时切换按钮的颜色(并恢复其他按钮的颜色)

    我有三个按钮 并且想在选择按钮时更改按钮的颜色 正如您将看到的 我可以更改选择的颜色 但是当选择按钮 B 时 我需要按钮 A 返回其原始颜色 此时按钮 B 应该采用所选颜色 依此类推 目前 每个选定的按钮都采用选定的颜色 但按钮不会返回到其
  • 在页面上包含两个版本的 jQuery,而不影响旧插件

    我们的 drupal 站点使用 jQuery 版本 1 2 1 运行 我们尚未升级该版本 问题是这样的 我们需要添加一个名为 jQuery Tokeninput 的新插件 但它仅适用于最新的 jQuery 版本 我们尝试将最新的 jQuer
  • git rebase master 功能会产生(重命名/删除)冲突,而 git rebase -i master 功能则不会

    我在使用 git 时遇到了一种奇怪的情况 其中我有一个功能分支修改了一些文件并删除了一个文件 foo js 当我通过 git rebase master feature 重新基于master时 我遇到了以下类型的冲突 CONFLICT re