告诉git关注移动的内容(不仅仅是移动的文件)

 手机用户2502873393 发布于 2023-02-11 12:23

在重构源代码时,有时您需要在文件中移动大块文本,甚至移动到新文件.您创建一个分支refactored并提交:

$git checkout master
$git branch refactored
$git checkout refactored

$git commit -m "refactored code"

但是,人们可能会在旧的预重构分支之上提交,更改已移动的代码:

$git checkout master

$git commit -m "bugfix"

在分支上refactored,您希望合并在master以下位置进行的更改:

$git checkout refactored
$git merge master

这导致了大的合并冲突.如果有办法告诉git简单地移动了内容,应该可以自动合并.

更糟糕的是,即使在解决冲突并提交冲突之后,git仍然无法使用该解决方案来确定进一步的合并:


$git commit -m "merge master into refactored"
$git checkout master

$git commit -m "bugfix2"
$git checkout refactored
$git merge master

这是可以避免的吗?我试过了git rerere,它无法解决这里的冲突.有没有什么方法git可以看到移动一个文本块作为实际移动,而不是删除和插入?如果它不能,那么最小化合并冲突的最佳方法是什么,如果你需要保持两个并行分支一段时间?

虽然这很容易移动完整文件的内容,但我找不到有关仅移动其中一部分或移动到同一文件内的信息.

此外,如果有一个解决方案,那么git blame重构代码的行为是什么?它会指向重构提交,还是忽略它?有没有办法实现后期?

如果有人感兴趣,我已经把我用于测试的(非常小的)存储库的base64编码的tar.gz放在了pastebin上

潜在解决方案

一种可能的解决方案可能是通过应用(自动)编辑的补丁来执行合并,其中包含预重构分支中的更改.是否开发了这样的软件?使用这种方法我想,因为这对git是透明的,所以git blame会指向重构提交.

我发现了同样的问题,适用于差异.没有提及任何现有的非专有实现,但提到了跟踪块移动的算法

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有