我从 master 创建了一个分支,以解决从 es5 语法到 es6 的文件迁移问题。
在该分支中,我更改了迁移文件的位置及其单元测试文件,并进行了一些其他修改。
我试过这些命令:
git checkout master
git remote update
git pull
git checkout -b <branch-name>
git mv path/to/file.js new/path/to/file.js
git mv path/to/file.spec.js new/path/to/file.spec.js
然后我提交更改,只有在第一次提交之后,我才开始修改文件。
我遇到的问题是,在我的拉取请求中,单元测试文件被识别为已修改的文件,另一方面文件本身,« file.js » 被识别为已删除并重新创建的文件。
这是个问题,因为我会丢失该文件的历史记录。
tl;dr: 别担心,因为它实际上并不重要!
为什么? Git 实际上根本不存储重命名。任何时候你比较两个提交,Git 都可能检测到重命名,或者单独的添加和删除,这取决于当时使用的算法(可以配置)以及文件的不同程度。请注意,
git mv
是只是一种方便。
大多数 PR 视图将源分支和目标分支的合并基础与源分支的尖端提交进行比较。这意味着不会查看提交之间的提交,因此 PR 视图不会考虑您所做的仅移动文件的提交。一个文件被检测为重命名而另一个文件未被检测的原因可能是由于文件之间的更改量,并且足以将其推过重命名检测阈值。但是,当您分别查看每个文件的历史记录时,您创建的中间提交在跟踪历史记录时仍然会有所帮助。您可以通过在本地进行测试来证明这一点:
master
并在您的源分支中合并来在本地模拟 PR 的合并。git log <filepath>
)。您应该看到两者都遵循重命名。git diff @~1 @
)