GIT 显示一个文件在 bitbucket 上移动 - 我想把它作为拉取请求的新文件

GIT is showing a file as moved on bitbucket - i want it as a new file for pull request

正如我在描述中提到的,当我查看我的拉取请求时,它看起来像文件被移动了,这是因为它是一个通用功能文件,我在其中复制了另一个文件并开始编辑。对于我的拉取请求,我更希望它显示为一个全新的文件而不是移动的文件。我尝试删除这 2 个文件并提交,然后创建新文件并粘贴代码并再次提交,但这没有用。

除了保留旧文件,当然,你不能强制git将其显示为新文件....实际上,这只是git的一些猜测。 .. git 不关心大部分...它不是保存在修订版中的信息的一部分.... git 将尽最大努力查看文件发生了什么如果您以后合并或 cherry-pick 或其他任何内容。

提交中的文件从来都不是真正的new,或old,或moved,或任何事物。他们只是在提交中。提交中 没有 的任何文件都没有。仅此而已,因为每个提交仅保存 Git 知道的 所有 文件的快照。

现在,如果您进行任意两次 不同的 提交,并将一个放在左侧,另一个放在右侧,现在 您可以 比较 left-side 文件与 right-side 文件。执行此操作时,您可能具有相同的文件名或不同的文件名。每个命名文件的内容可以相同,也可以不同。由进行 比较 的人决定:left-side 文件是否名为 hello 相同的 文件 right-side 文件 aloha?

Git本身,在比较文件时,通常使用下面的short-cut:

  • 如果 left-side 提交有一个名为 F 的文件,而 right-side 提交有一个名为 F 的文件,这些是“相同”文件,即使 F 的内容左侧和右侧不同。如果的内容不同,Git会构造并展示一个配方,通过它你可以把左边的F变成右边的F。

  • 但是如果 left-side 提交有一个名为 L 的文件而右侧没有, right-side 提交有一个名为 R 的文件,左侧没有:好吧,现在 Git 将 可选地 比较 [=79 的 内容 =] 到 right-R。如果内容足够相似,Git 会说 L 已重命名为 R:这两个文件将是 paired-up 和 Git 将生成将 L 更改为 R 所需的任何配方,从“将 L 重命名为 R”步骤。

这种配对左侧和右侧文件的过程是版本控制系统在两次提交中决定哪些文件是“相同”文件的方式。但是,仅仅因为文件具有相同的 name 并不一定意味着它们是相同的 file。根据 Git 操作,您可以指示 Git 在某些情况下 打破 配对。对于“检测重命名并配对 differently-named 文件”的情况,可以使用控件来启用或禁用它,并设置 Git 决定两个文件足够相似的阈值。

合并请求 (PR) 的棘手部分是 PR 实际上根本不是 Git 的一部分。 PR 由某些托管服务以某种 hosting-service-specific 方式处理。托管服务通常会选择如何 运行 一个或多个 git diff 命令来比较左侧和右侧提交,然后向您显示 Git 的输出。你能说服托管服务为这种 git diff 设置参数吗?如果是这样,您可以说服它以您希望看到的方式显示您的 PR。如果没有,那你就倒霉了:他们会以他们展示的方式展示你的 PR。

(Bitbucket 在过去的几年里有几个不同的引擎来做这些比较,但据我所知,他们没有这种 fine-grained 控制。你当然可以只获取将请求放入本地 command-line Git 存储库并以这种方式查看。)