拉取请求压缩合并后,GitHub的提交记录开始堆积。

9
  1. 我在GitHub上派生了另一个仓库。
  2. 写了一些代码并向上游提交了一个拉取请求。
  3. 上游主分支使用了squash选项合并。
  4. 现在下一个拉取请求包括新代码以及旧的提交记录。所以它们越来越多。

我该怎么办?

  • 这些仓库在代码方面完全同步。
  • 但是,GitHub顶部的徽章显示我的派生版本比上游版本多xx个提交记录。
  • 我试图将上游合并到我的仓库中(但没有效果,因为它们已经同步)。
  • 我不确定变基是否有用,因为有我的提交和其他人的提交。所以那里一团糟,我不知道要变基什么。

Rebase是在撤销提交历史时进行的,因此它是不可靠的。同样的情况也适用于压缩提交。因此,一个合理的做法是要求上游不再压缩提交。 - Striezel
2个回答

2
如果上游在他们的仓库中更改了您的提交历史记录(压缩提交),则您必须在您的仓库中执行相同的操作 - 将 master 重置为 upsteam master 并进行 force push 操作 - 在此过程中会失去您的个人提交,但是可以获得压缩后的提交。
git switch master
git fetch
git reset --hard upsteam/master
git push -f origin

这是一项破坏性操作,强制推送到主分支可能会被Github仓库设置阻止,但有时必须这样做。

如果上游仓库无论如何都会压缩您的提交记录,您可能需要在创建拉取请求之前考虑在自己的端上进行压缩。


1

我不确定rebase是否有帮助,因为有我的提交和其他人的提交。所以那里很混乱,我不确定该如何rebase。

执行git log命令查看你的下一个特性分支(从中你想要进行第二个拉取请求)的位置:

git log --graph --format=format:"%h% - %aD (%ar)%d%n %s - %an" --abbrev-commit --all --branches

刷新您的上游:

git fetch upstream

将您的提交内容仅基于拉取请求目标分支进行变基

git rebase --onto upstream/master yourFirstCommit~1 yourBranch

这将会把你的每一个提交(在上面的git log图表中看到的)从"yourFirstCommit"之后一直rebase到你分支的HEAD。
一旦这些提交被移动到upstream/master的顶端,你的pull request(在执行git push --force之后)将会得到更新,仅展示你自己的提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接