1

有人以 git 无法检测到它是同一个文件的方式更改了文件名及其内容。

他们也没有使用git mv,所以当我收到拉取请求时,我看到一个新文件被添加,一个旧文件被删除,这使得审查变得不切实际。

作为一个好人,我拉了他们的代码并尝试做一个late git mv,所以我可以在他们的拉取请求中添加一个提交,并在 Github 评论页面上看到漂亮的东西,但这没有用。

有没有办法对文件进行死后重命名?

4

1 回答 1

3

Git 不跟踪文件身份:存储库中没有任何内容表明bar修订版nfoo中的文件已从修订版 ( n -1)中的文件重命名/复制/移动。Doinggit mv与做 plainmv后接git add新名称和git rm旧名称相同。存储库仅在每次提交时存储目录树的快照,由检查存储库的工具决定不同提交中的文件如何相互关联。

当您查看修订历史并且 git 说文件被移动或重命名时,它在本地确定,作为基于旧文件和新文件内容相似性的猜测。许多 git 命令支持一个-M选项,该选项允许您指定相似度阈值,以决定将同一提交中的删除和添加视为重命名。默认阈值为 50%。

如果您希望 git 默认将更改视为重命名,而不必在-M每次检查存储库时指定较低的阈值,您可以将更改拆分为两个提交:一个在保留名称的同时更改内容,一个用于重命名文件,同时保持内容不变(或至少更改少于 50%)。

当然,“死后”执行此操作需要将分支头重置到旧提交之前,用两个新提交替换它,强制推送,并联系任何可能拉取原始版本的人,让他们知道你已经改变了历史。(这与对已发布给其他人的提交进行任何其他类型的更改没有什么不同。)

于 2015-11-04T03:16:51.190 回答