让 SourceTree 检测重命名,即使原始文件仍然存在

Have SourceTree detect a rename even if the original file remains

我正在尝试将一些 Javascript 文件转换为 TypeScript 文件。我已将 move.js 文件重命名为 IDE 中的 move.ts(在本例中为 VSCode)并使用 TSC 进行编译以检查是否一切正常。现在我想提交我的更改。

我不知道如何使 SourceTree and/or Git 理解:

  1. 我原来的文件被重命名了;
  2. 该文件(使用新名称)有一些更改;
  3. 已创建具有原始文件名的文件;

这可能吗?我如何使用 SourceTree(或者失败时,git 命令行工具)来指示此状态?它需要两次单独的提交吗?

这是 SourceTree 显示的状态:

如果我按原样暂存这些文件,它将作为编辑+添加提交,这是我不想要的。

git status 报道如下:

On branch TypeScriptConversion
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

  modified:   src/js/domain/move.js

Untracked files:
  (use "git add <file>..." to include in what will be committed)

  src/js/domain/move.ts

no changes added to commit (use "git add" and/or "git commit -a")

如何告诉 SourceTree and/or git 我的文件已重命名、编辑,并在其位置输入了一个 new 同名文件?

分离提交:在一次提交中进行重命名,然后在第二次提交中添加对原始文件的替换。

只是添加到上面的答案(2020 年):它似乎确实检测到重命名,如果只有少数或一定百分比的行是相同的——当然,如果你想要一些保证,分两步完成(如上面推荐的答案中所述)。

还有一件重要的事情:确保同时将两个项目放在一起,以增加 ST 正确检测差异作为重命名的机会;我自己和同事都观察到,如果您不小心只暂存了新文件,无论更改多么微不足道,它都会将旧文件检测为已删除。甚至有可能完全相同的文件在一次完成一个文件时得到 mis-tagged 和 delete/add。我不确定这是在内部通过 git 本身还是通过 ST 添加此功能(因为我不认为检测重命名智能发生在 git 中),但任何人都可以随意详细说明如果您知道,请发表评论