在git中提交后重命名文件

时间:2015-11-04 02:54:13

标签: git git-mv

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

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

作为一个好人,我拉了他们的代码并试图做 git mv,所以我能够为他们的拉取请求添加一个提交并且看得很漂亮在Github评论页面上,但这没有用。

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

1 个答案:

答案 0 :(得分:3)

Git不跟踪文件标识:存储库中没有任何内容表明修订版 n 中的文件 data(i) = GettableData.get(row, i) data(i) match { case date: Date => data.update(i, new Timestamp(date.getTime)) - case str: String => data.update(i, UTF8String(str)) + case bigInt: BigInteger => data.update(i, new JBigDecimal(bigInt)) + case str: String => data.update(i, UTF8String.fromString(str)) case set: Set[_] => data.update(i, set.toSeq) case _ => } 在修订版中从文件bar重命名/复制/移动(名词 -1)。执行foo与在新名称上执行git mv后跟mv和在旧名称上git add相同。存储库只是在每次提交时存储目录树的快照,并由工具检查存储库来决定不同提交中的文件如何相互关联。

当您查看修订历史记录并且git表示文件已被移动或重命名时,它会根据旧文件和新文件内容的相似性在本地确定。许多git命令支持git rm选项,该选项允许您指定相似性阈值,以确定同一提交中的删除和添加应被视为重命名。默认阈值为50%。

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

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