Git移动文件时保留历史记录

3
我们在工作中使用git。我们想要将名为"Workflows"的目录从Source/Workflows移动到新的位置Source/Sites/CompanySite/Workflows。我的同事在执行"git mv"命令或者移动之前就将该目录复制到新位置 "Source/Sites/CompanySite/Workflows" 并进行了提交。因此,我们在那个位置有了没有历史记录的新文件副本。然而,我们希望只是移动文件并保留它们的历史记录。所以我删除了新复制品,并尝试使用"git mv"来移动源文件,同时保留历史记录。我知道即使没有"git mv",git也会识别出我们正在重命名。但是,因为我的同事已经在那里创建了一个(空)历史记录,所以即使我将其删除,它仍会保留那个“新历史记录”。然后,无论我做什么,都不能将这些文件与它们的“原始历史记录”一起移动,因为它始终保留着那个“新历史记录”。 我希望我的问题清楚明白。如何移动这些文件并保留它们的历史记录?也许可以"清除"旧副本?

1
你的同事是在多久以前做的这个,团队有多大(即,放弃同事的提交并重试rebase有多实际)? - Roman
我推荐在https://dev59.com/HXA75IYBdhLWcg3wuLnD#13590229发布的解决方案。 - dr0i
2个回答

1

git mv并不能保证Git将其视为移动操作,它可能仍然将其视为删除+添加。Git可以推断移动操作,但不会记录它们。

如果您想要历史记录,请尝试在git log命令中传递--follow标志,它可以识别与原始文件的连接,并显示其历史记录。


1

这取决于您的要求:有可能使用git-filter-branch

这允许您在每个提交上应用shell脚本,例如:git filter-branch --tree-filter 'rm filename' HEAD

请注意,这将为每个提交创建新的提交ID。另请参阅this SO Question以使用filter-tree移动文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接