如何修复GitHub拉取请求中的提交顺序,由git rebase打破?

Eli*_*adL 23 git github rebase

当我编写代码时,我将其分解为易于查看的简单逻辑更改.

为此,我使用git rebase -i(交互式)来压缩,删除和更改提交顺序.

我注意到这有时会导致GitHub拉取请求的提交顺序不同(尽管订单保留在远程分支上).

例如,

  • 提交1
  • 提交2
  • 提交3

可能会出现在公关中:

  • 提交3
  • 提交1
  • 提交2

我搜索了互联网,但却设法找到了这个GitHub帮助页面:为什么我的提交顺序错误?他们的回答:

如果您通过git rebase或强制推送重写提交历史记录,您可能会注意到打开拉取请求时您的提交顺序无序.

GitHub强调Pull Requests是一个讨论的空间.它的所有方面 - 注释,引用和提交 - 都按时间顺序表示.在执行rebase时重写Git提交历史记录会改变空时连续体,这意味着提交可能无法按照您在GitHub接口中的预期方式表示.

如果您总是希望按顺序查看提交,我们建议您不要使用 git rebase.但是,请放心,当你看到时间顺序以外的东西时,什么都不会破坏!

有办法解决这个问题吗?

Eli*_*adL 14

我已成功解决了这个问题:

  1. 找到保留订单的最后一次提交
  2. git rebase -i <hash of that commit>
  3. 替换所有pickreword
  4. git push -f

在此之前,我尝试仅更改第一个提交消息,该消息也会更改以下所有哈希值,但这并未修复它.

我必须为之后的每一次提交都这样做才能使它工作.


nik*_*icc 6

为了自动化Eliad建议我使用Piotr的脚本:

git rebase "$(git merge-base HEAD master)" --ignore-date -x 'git commit --amend -C HEAD --date="$(date -R)" && sleep 1.05'


Von*_*onC 5

您可能不再需要修复任何东西(2020 年 7 月,3 年后)

看:

拉取请求提交现在按时间顺序排序

我们正在更改拉取请求时间线和提交视图中提交的排序方式。

提交当前按作者日期排序,这可能会导致提交在某些情况下出现无序,例如在 rebase 之后

通过此更改,提交将根据头分支中的时间顺序进行排序,这与 Git 中的顺序一致

这种顺序也反映在拉取请求 REST API 上的列表提交以及PullRequestGraphQL 中对象的时间线连接中。

了解有关拉取请求的更多信息