Git 错误地将文件标记为已删除而不是重写

Mac*_*eus 1 git

我正在对一个项目进行几次重构。因此,有时我需要重命名文件扩展名,例如index.js -> index.ts,并更改该文件上的许多行。

由于 git 错误地将其标记index.js为已删除并index.ts标记为新文件,因此这可能会对代码审查和日志造成不良影响。

有没有办法明确地对 git 说“嘿,我重命名index.jsindex.ts”?

编辑

使用的方法git add / git rm / git mv不起作用,因为 git 仍然说我创建了一个新文件并删除了其他文件。

另外,我不应该使用两次提交(一次用于重命名,一次用于更新其内容),因为第一次提交将被破坏,因为文件的构建步骤与文件.js不同.ts

tor*_*rek 11

\n

有没有什么方法可以明确地对 git 说“嘿,我将index.js 重命名为index.ts”?

\n
\n\n

不。

\n\n

这里的所有都是它的。Git 不存储对文件的更改。Git 存储文件的快照。在快照 X 中,您有一个名为index.js. 在快照 Y 中,您有一个名为index.ts.

\n\n

当比较快照X和快照Y时,可以让Git检测命名。检测基于两个事实:

\n\n
    \n
  1. 在快照 X 中,有一个名为 的文件index.js,在快照 Y 中,该文件不存在,但index.ts存在一个名为 的新文件;因此可以将这两个名称放入候选列表中以进行重命名检测。

  2. \n
  3. 现在重命名检测的候选列表已填充了从左侧 (X) 提交中消失并出现在右侧 (Y) 提交中的所有文件名,Git 将比较每对文件。如果这两个文件的内容足够相似,Git 会暂时将该对配对,并记住这个相似性索引值。运行完所有可能的配对后,Git 将采用具有最佳相似性索引的配对,并将该文件称为“重命名”。

  4. \n
\n\n

每当你让 Git 比较快照 X 和 Y\xe2\x80\x94 的任何提交哈希值XY时,实际上\xe2\x80\x94就可以告诉 Git:

\n\n
    \n
  1. 使用或不使用重命名检测器;
  2. \n
  3. 如果使用重命名检测器,临时配对文件的最小相似度阈值是多少?
  4. \n
\n\n

使用该git diff命令,重命名检测器在 Git 2.9 之前默认为关闭,在 Git 2.9 及更高版本中默认为打开。在所有版本的 Git 中,相似度值默认为“50% 相似”。使用-M标志打开检测器并设置相似性阈值。

\n\n

使用其他 Git 命令时,其他标志和参数可能允许您启用重命名检测并设置阈值\xe2\x80\x94,或者在某些情况下,没有那么多。例如,git log --follow打开重命名检测器,但将其限制为仅一个文件名,并且不允许您设置阈值。

\n\n

git status命令用于始终启用重命名检测并将阈值设置为 50%。现在它服从了git config启用或禁用重命名检测的设置,但仍然无法设置阈值。

\n\n

同样,当您比较两个提交时,会发生此重命名检测。提交本身只是所有文件的快照。具有不同重命名检测设置的两个不同git diff命令将显示不同的操作集,这些操作集导致将第一个提交替换为第二个提交。 git diff命令不会显示某人实际做了什么。相反,它显示了一些将产生相同结果的操作序列。

\n