GIT:如何重命名文件但保留其历史记录?

时间:2014-03-16 01:28:28

标签: git

我的项目有几个错误的命名文件。我想重命名它们。我试着用:

 git mv nameA nameB
 git commit

重命名后,我发现必须使用:

 git log --follow nameB

查看文件的历史记录。并且git blame nameB丢失了每一行的原始信息,现在每行都有最后一次提交ID。

我想知道是否有方法可以重命名文件但保留文件的所有历史记录,包括git loggit blame

2 个答案:

答案 0 :(得分:1)

我发现你遇到了类似的问题,用户无法使用git blame命令获得正确的输出。然后他尝试了

git blame -C -C filename

并获得正确的输出。

我想你可能想看看这个讨论。 git blame --follow 。 希望有所帮助。

答案 1 :(得分:1)

看起来你真的想要在整个历史记录中更改文件名,即它看起来应该看起来好像没有那个坏名字。

在这种情况下,您可以使用以下内容:

git filter-branch --tree-filter 'git mv oldname newname' -- --all

请注意git filter-branch是一个非常强大的工具。确保您拥有存储库的备份,以防您真正破坏某些内容。另请注意,如果您已经发布了存储库,这可能是一个坏主意。在其他文件中可能还会对旧名称进行一些逻辑引用,这可能会使旧提交无法构建。

如果你已经发布了你的存储库,你可能应该做一个简单的git mv,在历史记录中使用错误名称,并使用git的重命名检测机制,如另一个答案中所示。