我这种情况在我的dev目录下用git:联合收割机提交的两个文件历史混帐
/mobile.html
/sub-folder/mobile.html
这与两地提交相同的文件。我先在root中工作了mobile.html,然后将它移动到了/子文件夹,但是它的提交从未遵循过。我继续努力并做出新的承诺。
所以现在我主要有:
/mobile.html
- 犯,犯b/sub-folder/mobile.html
- 提交C,提交d
反正是有加盟承诺这两个历史文件?
我这种情况在我的dev目录下用git:联合收割机提交的两个文件历史混帐
/mobile.html
/sub-folder/mobile.html
这与两地提交相同的文件。我先在root中工作了mobile.html,然后将它移动到了/子文件夹,但是它的提交从未遵循过。我继续努力并做出新的承诺。
所以现在我主要有:
/mobile.html
- 犯,犯b/sub-folder/mobile.html
- 提交C,提交d反正是有加盟承诺这两个历史文件?
我想你在这里看到的是你没有意识到事实Git不跟踪单个文件(!)的历史。在Git模型中,仅跟踪内容,并且它在给定存储库快照中呈现的所有文件(提交代表的内容)的分布是不相关的。因此,重命名不会以任何特定方式进行跟踪,并且git mv
命令只是git rm --cached <filename> && mv <filename> <othername> && git add <othername>
的便利帮助。
为了补偿文件更改历史记录的感知不连续性,Git在其历史遍历命令中有特殊的旋钮,可用于告诉Git它应该多么努力地检测人类会将文件重命名为文件重命名。尤其要注意git log
命令的--follow
,--find-renames
和--find-copies
命令行选项。
如果您移动文件并提交而不修改它们,git能够知道这是一个移动而不是删除+新文件。
@Anatoly,另请参见[this](http://stackoverflow.com/a/5493663/720999)。 – kostix 2013-05-05 09:19:06