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


当我编写代码时,我将其分解为易于快速查看的小型逻辑更改。

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

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

例如,

  • 提交1
  • 提交2
  • 承诺3

可能会出现在公关中:

  • 承诺3
  • 提交1
  • 提交2

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

如果你通过git rebase或强制推送重写你的提交历史记录,那么你   可能会注意到您的提交顺序在打开时出现故障   拉请求。

GitHub强调Pull Requests是一个讨论的空间。各方面   它的注释,引用和提交 - 用a表示   按时间顺序排列。重写您的Git提交历史记录 而   执行rebase 改变时空连续体,这意味着   提交可能无法按照您期望的方式表示   GitHub界面。

如果您总是希望按顺序查看提交,我们建议您不要使用    git rebase。但是,请放心,当你没有任何事情被打破   看看时间顺序以外的事情!

有办法解决这个问题吗?


1507
2018-06-22 16:08


起源

我认为你已经获得了很好的信息来源。我相信github的员工非常了解github,找到一个了解更多的人会很困难。因此,如果 github帮助 告诉你,按顺序查看提交的唯一方法是不使用 git rebase 可能有 没有其他的工作环节。 - running.t
@ running.t请看我的回答。 :) - Eliad
关于“GitHub强调Pull Requests作为讨论的空间”从我的经验来看,提交页面遭受同样的问题。所有提交都按创建时间排序。因此,合并提交在“原始”(合并前)提交树内混合 - eplaut


答案:


我设法解决了这个问题:

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

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

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


6
2018-06-22 16:49





自动化什么 Eliad 建议我使用来自的脚本 彼得·

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


4
2018-05-14 14:20