Git-如何获取文件';的历史记录已添加到另一个文件。。。还是什么

Git-如何获取文件';的历史记录已添加到另一个文件。。。还是什么,git,Git,好吧,基本上是一个开发人员搞砸了。我会试着把它写得简短些,这样更容易理解 我们在master中有文件/src/SomeFile.php 开发者创建了一个名为task-1 在master和task-1中分别对/src/SomeFile.php进行了更改 到这里一切正常 开发者决定更改master中的文件结构,并将/src/SomeFile.php移动到/src/newdir/SomeFile.php。除了不使用git移动文件外,他创建了一个新文件,将旧文件中的代码复制粘贴到新文件中,删除旧文件并进

好吧,基本上是一个开发人员搞砸了。我会试着把它写得简短些,这样更容易理解

我们在
master
中有文件
/src/SomeFile.php

开发者创建了一个名为
task-1

master
task-1
中分别对
/src/SomeFile.php
进行了更改

到这里一切正常

开发者决定更改
master
中的文件结构,并将
/src/SomeFile.php
移动到
/src/newdir/SomeFile.php
。除了不使用git移动文件外,他创建了一个新文件,将旧文件中的代码复制粘贴到新文件中,删除旧文件并进行提交

提示转发更多的提交,我们希望将
task-1
合并到
master
中,并发现
/src/newdir/SomeFile.php
的提交历史记录不包含仍然是
/src/SomeFile.php
时的原始提交历史记录

所以现在,当我们想进行合并时,它想完全覆盖
主文件中的文件,不管分支后发生了什么提交,文件在
task-1
中,对于合并冲突,我并没有任何有意义的工作,因为它显示整个文件是不同的

我该如何解决这个问题。我已经回滚了合并。在理想情况下,我将能够返回到文件移动之前的版本,使用git移动文件,使其保留其提交历史,然后让git重新应用从文件移动到当前主版本(预合并)的所有提交,以便我们能够成功合并。然而,我知道这是不可能的

所以我想知道,我是否可以告诉git这个新文件,实际上是旧文件,但是在另一个地方,所以它会对它重新应用文件历史记录,这样我就可以在发生冲突时进行合并并获得有意义的差异

对不起,如果不清楚,我已经尽力解释了

编辑

因此,在github上玩,如果我查看“新”文件
/src/newdir/SomeFile.php
并查看其历史记录,它只显示文件“移动”时的提交历史记录(复制/粘贴到新文件,删除旧文件)。然而,如果我看一下“责备”,它会给我一个完整的提交历史记录,即使是从原始文件。为什么只有责备才是这样?我怎样才能让这两者兼而有之


非常感谢。

< P>如果您使用Git 1.7.4+,您可以尝试在合并过程中使用“重命名阈值”参数(%),以使Git考虑文件重命名候选。例如:

git merge -X rename-threshold=25

这是我能想到的唯一方法,因为git在技术上没有一流实体重命名的概念。它只是在某种程度上检测文件重命名。

恐怕这并没有起到任何作用。如果文件在
task-1
中被“移动”,而不是在master中,我可能会有所帮助。我不确定。不管怎样,我确实尝试过(上升到75),但对我来说没有什么真正的改变。嗯,也许降低阈值百分比而不是增加它会起作用。另外,也许这家伙的脚本会有所帮助:我认为问题不在于合并,而在于在master中无法识别重命名,因此提交历史不存在。我发送的阈值为5。结果仍然相同。我会看看剧本,看看故事是什么。