首页 > 解决方案 > GIT 显示文件在 bitbucket 上移动 - 我希望它作为拉取请求的新文件

问题描述

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

标签: gitversion-controlbitbucket

解决方案


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

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

Git 本身在比较文件时,通常使用以下快捷方式:

  • 如果左侧提交有一个名为 F 的文件,而右侧提交有一个名为 F 的文件,这些是“相同”的文件,即使 F 在左侧和右侧的内容不同。如果内容确实不同,Git 将构建并显示一个配方,您可以通过该配方将左侧 F 更改为右侧 F。

  • 但是如果左侧提交有一个名为 L 的文件,而右侧没有,并且右侧提交有一个名为 R 的文件,而左侧没有:那么,现在 Git 将选择性地比较left的内容-L 到右-R 的那些。如果内容足够相似,Git 会说 L 已重命名为 R:这两个文件将配对,Git 将生成将 L 更改为 R 所需的任何配方,从“将 L 重命名为 R”步骤开始。

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

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

(在过去的几年里,Bitbucket 有几种不同的引擎来进行这些比较,但据我所知,它们没有这种细粒度的控制。你当然可以将请求提取到本地命令中——行 Git 存储库并以这种方式查看它。)


推荐阅读