在原始仓库接受拉取请求后,有没有办法在 fork 中压缩提交?

Posted

技术标签:

【中文标题】在原始仓库接受拉取请求后,有没有办法在 fork 中压缩提交?【英文标题】:Is there a way to squash commits in fork after pull request was accepted to original repo? 【发布时间】:2019-09-09 20:42:26 【问题描述】:

我有一个存储库的分支,我正在其中编写我的部分代码。我在将代码(通常是大约 50-100 行 sql 代码)写入 fork 的 master 分支(虽然当时我没有意识到)然后拉取请求的 fork 的 master 分支时犯了很大的错误进入主分支。

原始仓库中的设置只允许我压缩和合并提交。所以现在我处于每个拉取请求都像 60 次提交和 1 个文件更改的情况(我工作的实际情况)。

有没有办法以某种方式同步原始 repo 和 fork 的状态,以从 master 分支中删除所有不必要的提交?

【问题讨论】:

您正在寻找rebase 【参考方案1】:

快速解答

首先,在您的fork 中使用fetch 获取有关origin 状态的信息(原始回购)

然后,您将能够比较它们的状态并决定您要做什么。

您将能够重写 fork 的历史记录以匹配 origin 不过,要更改 origin 以匹配您的 fork 会更加困难:

您需要origin 的推送权限才能重写历史记录 如果您没有,则需要与可以为您做的人协调 由于origin 与其他人共享,因此需要通知他们,因为这可能会打断他们正在处理的事情

有关哪些操作可以帮助您实现这一目标的更详细答案,您需要提供有关origin 和您的fork 的当前状态的更多细节,以及您打算为它们提供的状态。此命令可能会有所帮助:

git log --graph --oneline --decorate

【讨论】:

【参考方案2】:

经过一番研究,我设法找到了可行的解决方案:

在第一次提交之前查找提交哈希 git reset --hard git push -f origin master git pull 上游master git push origin master

而且我的 fork (origin here) 与上游同步。

【讨论】:

“你的第一次提交”是指fork的第一次提交还是自fork的最新PR以来最新工作的第一次提交? 我已经有一段时间没有解决这个问题了,但如果我没记错的话,这是 fork 的第一次提交

以上是关于在原始仓库接受拉取请求后,有没有办法在 fork 中压缩提交?的主要内容,如果未能解决你的问题,请参考以下文章

git tortoise 创建拉取请求 有啥用

GitHub怎样fork别人的代码到自己仓库并进行贡献

VSTS拒绝了拉取请求完成工作流程

一篇文章教会你拉取别人的GitHub代码,修改后提交成为贡献者!!!

有没有办法将拉取请求转回草稿拉取请求?

从 github 上 fork repositories 后,如何和原仓库同步?