2013-05-05 81 views
0

我这种情况在我的dev目录下用git:联合收割机提交的两个文件历史混帐

/mobile.html 
/sub-folder/mobile.html 

这与两地提交相同的文件。我先在root中工作了mobile.html,然后将它移动到了/子文件夹,但是它的提交从未遵循过。我继续努力并做出新的承诺。

所以现在我主要有:

  • /mobile.html - 犯,犯b
  • /sub-folder/mobile.html - 提交C,提交d

反正是有加盟承诺这两个历史文件?

回答

3

我想你在这里看到的是你没有意识到事实Git不跟踪单个文件(!)的历史。在Git模型中,仅跟踪内容,并且它在给定存储库快照中呈现的所有文件(提交代表的内容)的分布是不相关的。因此,重命名不会以任何特定方式进行跟踪,并且git mv命令只是git rm --cached <filename> && mv <filename> <othername> && git add <othername>的便利帮助。

为了补偿文件更改历史记录的感知不连续性,Git在其历史遍历命令中有特殊的旋钮,可用于告诉Git它应该多么努力地检测人类会将文件重命名为文件重命名。尤其要注意git log命令的--follow--find-renames--find-copies命令行选项。

+1

@Anatoly,另请参见[this](http://stackoverflow.com/a/5493663/720999)。 – kostix 2013-05-05 09:19:06

0

如果您移动文件并提交而不修改它们,git能够知道这是一个移动而不是删除+新文件。