Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 让SourceTree检测重命名,即使原始文件仍保留_Git_Sourcetree - Fatal编程技术网

Git 让SourceTree检测重命名,即使原始文件仍保留

Git 让SourceTree检测重命名,即使原始文件仍保留,git,sourcetree,Git,Sourcetree,我正在尝试将一些Javascript文件转换为TypeScript文件。我已经在IDE中将我的move.js文件重命名为move.ts(本例中为VSCode),并使用TSC编译以检查是否一切正常。现在我想提交我的更改 我不知道如何让SourceTree和/或Git理解: 我的原始文件被重命名;及 该文件(使用其新名称)有一些更改;及 创建了一个具有原始文件名的新文件 这可能吗?我如何使用SourceTree(或者如果不使用,则使用git命令行工具)来指示此状态?它需要两个单独的提交吗 以下是So

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

我不知道如何让SourceTree和/或Git理解:

  • 我的原始文件被重命名;及
  • 该文件(使用其新名称)有一些更改;及
  • 创建了一个具有原始文件名的新文件 这可能吗?我如何使用SourceTree(或者如果不使用,则使用git命令行工具)来指示此状态?它需要两个单独的提交吗

    以下是SourceTree显示的状态:

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

    以下是
    git状态
    报告:

    分支类型转换上的
    
    未为提交而暂存的更改:
    (使用“git add…”更新将提交的内容)
    (使用“git签出--…”放弃工作目录中的更改)
    修改:src/js/domain/move.js
    未跟踪的文件:
    (使用“git add…”包含在将提交的内容中)
    src/js/domain/move.ts
    未向提交添加任何更改(使用“git add”和/或“git commit-a”)
    

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

    分开提交:在一次提交中重命名,然后在第二次提交中添加替换原始文件的内容。

    只是为了补充上述答案(2020年):如果只有几行或某个百分比的行相同,它似乎会检测到重命名。但是,如果您希望得到某种保证,请分两步执行(如上面推荐的答案中所述)


    还有一件更重要的事情:确保您同时将两个项目放在一起,以增加ST正确地将差异检测为重命名的机会;我和同事都注意到,如果您只是意外地暂存了新文件,那么无论更改多么微不足道,它都会将旧文件检测为已删除。当一次只删除一个文件时,完全相同的文件甚至可能被错误地标记为delete/add。我不确定这是通过git本身内部实现的,还是通过ST为该功能添加的(因为我不认为在git中智能地检测重命名),但任何人都可以随意在评论中详细说明,如果你知道,换句话说:你不能在一次提交中重命名和编辑替换文件,同时保留文件重命名的信息。我刚刚通过分别做这些步骤,然后挤压它们,学到了同样多的东西。我会听从你的建议,改为使用两个提交。是的,这是正确的-基本上,如果文件仍然以其原始名称存在,那么它在技术上已经更改(即使100%更改),而不是重命名。没有--“是的,但不,这不是我的意思”为此打开重命名:)我在Sourcetree中找不到“重命名”命令,所以这一定意味着您指的是文件重命名。但这将是在Sourcetree中添加“新”文件的第一步。所以我的问题是:“重命名”和“添加”两个不同的操作/步骤是什么?