Git在整个历史记录中重命名文件

时间:2014-11-27 11:00:56

标签: git refactoring

我的情况是开发了原型应用程序而没有过多关注文件夹结构和命名。 随着原型的成熟,它在某些时候被切换为遵循命名约定,其中包括文件夹结构中的名称。

在项目文件命名为app_project.pro之前,它现在被命名为app-project.pro。 这种重构更改都发生在一个git提交中。

现在出现的问题是每次在重构评论之前有结帐时IDE都会中断。这使git bisect成为一个地狱。

有没有办法在历史记录中使用git命令执行重构?我并非瞄准这里的交互式变基,而是在整个历史中每次出现app_project.proapp-project.pro取代{<1}}。


想法:我目前的想法是尝试重构.git中的所有内容,而不是将其推送到原点。我是唯一一个使用它的人,所以它不应该是一个问题。

.git文件夹中没有app_project.pro的概念。我猜测差异并没有存储在ASCII&gt;

2 个答案:

答案 0 :(得分:2)

Tree filter就是你想要的:

$ git filter-branch --tree-filter 'if [ -f <file_name> ]
then
 mv <file_name> <new_file_name>
fi' --force HEAD

答案 1 :(得分:0)

我认为你无法实现自己的目标。

如果您决定更改文件夹/文件的名称,那么git会将其视为不同的文件,因为您建议此版本控制不可编辑。

即使内置命令git mv oldname newname也是以下的快捷方式:

mv oldname newname
git add newname
git rm oldname