Rebase 或 cherry pick 这些提交?

Rebase or cherry pick these commits?

不久前我尝试了变基,结果把自己搞砸了。

经过一些中止的尝试后,我的文件处于所需的状态,但是当我在 github:

上准备拉取请求时,我的提交历史看起来很丑陋

我想在打开 PR 之前将所有内容压缩为一次提交,但不知道如何操作。如果我尝试 git rebase -i HEAD~5 我会得到列表中显示的其他人的提交(可能是因为我在某个时候从 master 合并?)

我不能轻易地挑选,因为那里有合并提交,而且我不知道如何实现它,涉及合并的挑选。

正如我提到的,如果我现在打开一个 PR,文件应该是它们应该的样子,但我知道回购经理会要求我压缩那个历史。我正在寻找有关做什么的建议?

编辑:为了响应更多信息的请求,这是来自我的 git 客户 sourcetree 的图表。希望它有所帮助(我意识到我没有 post 获取 100% 的信息,也不一定期待答案的灵丹妙药,但我希望有一种方法。)

哇,在 post 中看起来一点都不好。 Here's the link to the image

啊,如果手头没有完整的历史记录等,这真的很难弄清楚,但我认为 HEAD~5 是罪魁祸首。你回到历史太远了——据我所知,你的实际分支上只有 3 次提交。您可以通过明确指定提交哈希来尝试变基吗?例如

git rebase -i <parent-of-d9e6a34>

你当然会用实际的提交哈希替换 <parent-of-d9e6a34>

编辑:git rebase -i d9e6a34~1 也应该这样做。

I'd like to squash all that to a single commit

那你就不需要rebase了,直接用resetcommit就可以了。

git reset --soft origin/master
git commit

git reset --soft 会将您当前的分支更新为与 origin/master 相同的提交,但不会更新您的索引或工作树,因此在此之后,您的所有更改仍在索引中并准备就绪再次提交。