git merge:将更改应用于移动到不同文件的代码

2024-03-11

我现在正在尝试一个非常强大的 git merge 操作。我遇到的一个问题是,我对分支中的某些代码进行了一些更改,但我的同事将该代码移动到了他分支中的新文件中。所以当我这样做的时候git merge my_branch his_branch,git 没有注意到新文件中的代码与旧文件中的代码相同,因此我的任何更改都不存在。

将我的更改再次应用到新文件中的代码的最简单方法是什么?我不会遇到太多问题来找出需要重新应用哪些提交(我可以使用git log --stat)。但据我所知,没有办法让 git 将更改重新应用到新文件中。我现在看到的最简单的事情是手动重新应用更改,这看起来不是一个好主意。

我知道 git 识别 blob,而不是文件,所以肯定有一种方法可以告诉它,“应用此提交中的确切代码更改,除了不是它原来的位置,而是它现在在这个新文件中的位置”。


我遇到了类似的问题,我通过重新调整我的工作以匹配目标文件组织来解决它。这是有效的,因为 git 会跟踪文件content,因此通过在重命名之上进行变基,可以根据需要应用更改。

更准确地说,假设您修改了original.txt在你的分支机构(local分支),但在主分支上,original.txt已被复制到另一个,比如说copy.txt。 此副本已在我们命名为 commit 的提交中完成CP.

您想要应用所有本地更改,提交A and B下面,是在original.txt, 到新文件copy.txt.

 ---- X -----CP------ (master)
       \ 
        `--A---B--- (local)
 

创建一个一次性分支move在你的改变的起点git branch move X。也就是说,把move提交时分支X,您要合并的提交之前的那个;最有可能的是,这是您分支以实施更改的提交。作为用户@迪戈里杜写在下面,你可以做git merge-base master local找到X.

 ---- X (move)-----CP----- (master)
       \ 
        `--A---B--- (local)
 

在此分支上,发出以下重命名命令:

git mv original.txt copy.txt

这会重命名该文件。注意copy.txt此时您的树中尚不存在。
提交您的更改(我们将此提交命名为MV).

        ,--MV (move)
       /
 ---- X -----CP----- (master)
       \ 
        `--A---B--- (local)
 

您现在可以在以下基础上重新调整您的工作move:

git rebase move local

这应该没有问题,并且您的更改将应用​​到copy.txt在您当地的分行。

        ,--MV (move)---A'---B'--- (local)
       /
 ---- X -----CP----- (master)
 

现在,您不一定想要或需要提交MV在主分支的历史记录中,因为移动操作可能会导致与提交时的复制操作发生冲突CP在主分支中。

您只需再次重新调整您的工作,放弃移动操作,如下所示:

git rebase move local --onto CP

... 在哪里CP是提交在哪里copy.txt被引入到另一个分支。 这将重新调整所有更改的基础copy.txt在上面CP犯罪。 现在,你的local分支就像你总是修改一样copy.txt并不是original.txt,并且您可以继续与其他人合并。

                ,--A''---B''-- (local)
               /
 -----X-------CP----- (master)
 

重要的是,这些更改要应用到CP或以其他方式copy.txt将不存在并且更改将应用​​回original.txt.

希望这一点是清楚的。 这个答案来晚了,但这可能对其他人有用。

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

git merge:将更改应用于移动到不同文件的代码 的相关文章

  • 全局 git 配置数据存储在哪里?

    使用时git config global要进行设置 它将写入哪个文件 Example git config global core editor blah 我在这些地方找不到它 C Program Files Git etc gitconf
  • Git 显示更改后的相同文件

    当我似乎无法弄清楚更改时 Git 向我显示整个文件已更改 这是 cygwin git 但它也发生在 msysgit 中 git version git version 2 1 1 diff lt git show HEAD File cs
  • git 提交消息的 vim 语法高亮显示 - 自定义 commentchar

    如上所述在这个答案中 https stackoverflow com a 14931661 835945 从 Git 1 8 2 开始你可以使用core commentchar配置值将提交消息注释更改为默认值以外的其他内容 哈希标记或哈希符
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • Git 中的专有+开源设置? (例如铬/铬)

    您将如何设置一个拥有专有版本和开源版本 例如 Chrome 和 Chromium 的代码存储库 对于 Git 您会使用两个分支还是两个存储库 您如何使 私有 版本与开源版本保持同步 如果是我 我会有两个存储库 这样 您就可以对每个版本拥有不
  • 使用 Git 的 Spring Cloud 配置服务器 - 无法克隆或签出存储库连接超时

    我正在使用 GIT 在 Spring Cloud Config Server 上进行 POC Spring Boot 1 5 3 RELEASE 爪哇1 8 弹簧工具套件https github com kishornpatil https
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • GitHub API:标记提交所属(与 git describe --tag 并行)

    我正在使用 GitHub API 进行实验octokit https github com octokit octokit rb红宝石 我的目标是能够提取提交 SHA 所属的 标签 现在我可以使用命令行轻松地执行此操作 gt git des
  • Git 命令显示我对给定远程的权限

    同事可以从远程存储库获取数据 但不能推送到远程存储库 我怀疑他对遥控器只有读权限而没有写权限 我可以通过多种方法来检查这一点 但我想不出他可以在 git 中使用的方法 是否有 git 命令可以显示给定远程存储库的权限 No Git 本身不处
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 如何使用 .gitattributes 避免在 git root 中包含文件夹,但在 zip 的 dist 文件夹中包含同名文件夹

    我有一个名为lib在存储库的根目录和另一个名为lib在 dist 文件夹中 我正在尝试使用 gitattributes文件排除除 dist 之外的所有文件夹和文件 以便任何下载为 zip 或 tarball 的人都只会 git 分发文件 我
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo

随机推荐

  • wget 无法下载 - 404 错误

    我尝试使用 wget 下载图像 但收到如下错误 2011 10 01 16 45 42 http www icerts com images logo jpg Resolving www icerts com 97 74 86 3 Conn
  • Android 应用程序的蓝牙连接自动断开

    我正在创建一个应用程序 它以编程方式与 Android 应用程序连接 BLE 设备 这是我的连接 断开连接代码 当用户单击 连接 按钮时 new Thread new Runnable Override public void run mC
  • 使用 SMTP 发送电子邮件 codeigniter

    我正在尝试使用 smtp codeigniter 发送电子邮件 我正在使用的代码如下 public function notify marketing config Array protocol gt smtp smtp host gt s
  • C# 中是否有 ShouldSerialize[PropertyName] 的替代方案?

    我最近一直在编写大量代码 其中涉及使用 Json NET 进行序列化 并且由于我序列化的数据的性质 有时并非所有属性都需要序列化 因此 我执行如下操作 public int Foo get set public bool ShouldSer
  • 好的 asp.net (C#) 应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于满足以下条件的优秀开源 asp net C 应用程序有什么建议吗 设计精良且多层次 干净且带注释的
  • Ruby:读取 PDF 文件

    我正在寻找一种快速可靠的方法来在 Ruby 在 Linux 和 OSX 上 中读取 解析大型 PDF 文件 直到现在我发现了相当古老和简单的PDF 工具包 http pdf toolkit rubyforge org a pdf转文本 ht
  • ASP.NET 5 Web 应用程序作为 Azure Web 角色?

    我们的解决方案中有一个 ASP NET 5 Web 应用程序 通常 我们可以右键单击云服务 角色 项 然后从解决方案中的现有项目添加新角色 但它无法将该项目标识为 Web 角色 我们如何能够在 Azure Web 角色中托管 ASP NET
  • 生成位置周围的随机坐标

    我想要一个函数 它接受地理位置 纬度 经度 并生成周围的随机坐标集 但也将这些参数作为计算的一部分 要制作的随机坐标数 生成半径 随机坐标之间的最小距离 以米为单位 用于生成其周围位置的根坐标 生成方式的示例 实现这一目标的好方法是什么 生
  • 使用环境变量的 Maven 本地存储库

    如何使用环境用户变量设置 标记 我尝试了这条路 myRepo repo 但它不起作用 myRepo C maven repo 我无法使用绝对路径来解决可移植性问题 但我可以将 myRepo 设置到每个系统上的正确位置 其中绝对路径可能会有所
  • 我可以在本地测试 AWS Glue 代码吗?

    阅读 Amazon 文档后 我的理解是运行 测试 Glue 脚本的唯一方法是将其部署到开发端点并在必要时进行远程调试 同时 如果 Python 代码由多个文件和包组成 则除了主脚本之外的所有文件和包都需要压缩 这一切让我感觉 Glue 不适
  • 如何使用与其文件扩展名关联的程序打开文件?

    有没有一种简单的方法可以在Windows中通过其关联程序打开文件 就像在 Windows 资源管理器中双击它一样 但使用我的代码自动完成 例如 在计算机 A 上 text txt 将在写字板中打开 但在计算机 B 上 由于用户文件扩展名分配
  • Bootstrap - 选择和按钮彼此相邻

    我有一个
  • 我应该如何编写 .i 文件来包装 Java 或 C# 中的回调

    我的 C 程序使用定期调用的回调函数 我希望能够处理 Java 或 C 程序中的回调函数 我应该如何编写 i 文件来实现此目的 C 回调看起来像这样 static void on incoming call pjsua acc id acc
  • JDBI 的 @BindBean 在 INSERT 期间未在 bean 类中找到命名参数

    当使用 JDBI 的 BindBean 将值插入 Dropwizard 中的 Mysql 数据库时 我始终遇到以下异常 问题似乎是 JDBI 无法找到 bean 中的属性 我已经将该问题隔离到一个单独的项目中 但无法弄清楚哪里出了问题 我将
  • 在 HTML 上使用 setter 和 getter 变量(角度组件)

    我创建了一个简单的角度组件来测试使用 getter setter 样式的变量的使用情况 import Component from angular core Component selector my app templateUrl app
  • 仅隐藏滚动上的操作栏而不是操作栏选项卡

    我在向下滚动时尝试隐藏操作栏时遇到问题 然后在向上滚动时 必须再次显示操作栏 For Eg 我提到了这个Tutorial http www techrepublic com article pro tip maximize android
  • Android 12 上的 PendingIntent.FLAG_UPDATE_CURRENT 错误

    在我的应用程序中 我计划在每天的特定时间设置闹钟 为此 我正在使用警报管理器 请参阅下面的代码 这在 12 以下的 Android 设备上运行良好 但在 12 及更高版本上则不行 Firebase Crashlytics 上出现错误 以 S
  • 如何用CGPathAddCurveToPoint创建一个完美的半圆?

    我正在尝试使用 CGPathAddCurveToPoint 创建一个半径为 15 点的完美右半圆 如下所示 CGPathMoveToPoint path NULL 0 0 CGPathAddCurveToPoint path NULL 15
  • Google Chrome 扩展程序可在用户点击后关闭通知

    Chrome 扩展程序运行良好 我的问题是通知会在 7 秒后关闭 我想让用户点击关闭通知 function engine var latestId var ids var messages var newmessage get http l
  • git merge:将更改应用于移动到不同文件的代码

    我现在正在尝试一个非常强大的 git merge 操作 我遇到的一个问题是 我对分支中的某些代码进行了一些更改 但我的同事将该代码移动到了他分支中的新文件中 所以当我这样做的时候git merge my branch his branch