首页 > 解决方案 > Git - 创建 PR 显示较旧的提交

问题描述

您好,我正在从 github 创建一个 PR,以将一个名为 master_wes 的分支合并到 master 中。当我比较更改时,它显示的是合并到旧 PR 中的所有先前提交的更改,而不是仅显示自最近合并 PR 以来所做的更改。

尽管事实上与主分支和我的本地分支的唯一区别是自最近一次 PR 以来所做的更改。

我一直在为我的所有 PR 重新使用同一个分支。

这是我的问题:1)如何解决这个问题,以便它只显示自上次 PR 合并(从 master_wes 完成)以来的提交?2)如何防止这种情况在未来发生?

谢谢!

编辑:master_wes 过去的 PR 合并是使用压缩合并完成的

标签: gitgithub

解决方案


在合并两个长期运行的分支时使用 squash 合并是一个坏主意。

当您打开拉取请求时,GitHub 会显示您的分支中来自合并基础(通常是共同祖先)在您的分支和基础分支(您请求合并到的分支)之间的更改。如果您使用正常的合并提交,那通常是两个分支上的最新合并提交。

但是,当您创建 squash 合并时,您将代码作为单个提交应用,而不使用合并提交。Git 不知道旧版本的分支已被应用,master因为它们之间没有新的共享历史记录。因此,当 GitHub 计算要在您的分支和 之间显示的最新共同祖先时master,它与以往一样(这是您的分支最初创建的点),并且它显示了所有曾经存在的提交在你的分支上。

解决此问题的最简单方法是为要合并的每个项目使用新的主题分支。第二种最简单的方法是master使用 每次重新创建分支git checkout -B master_wes master,这会将分支重置为相同master(并销毁其上的任何更改)。如果您执行后者,则可能需要强制推送您的分支,除非您在合并时删除了服务器上的分支。

您还可以避免使用 squash 合并(无论如何我强烈推荐),这将解决您的 UI 问题,但是继续一次又一次地合并相同的重用分支而不重置它往往会使历史记录有点粗糙(并导致某些操作不必要地慢),所以我不建议这样做。


推荐阅读