Git,如何对 "force"进行 squash rebase

标签 git git-merge git-rebase

我需要将一些提交“压缩”在一起。通常我习惯于做这样的事情:

git rebase -i HEAD~10

但是,现在我收到以下错误:

error: could not apply 2009972... fixes

When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".

如您所见,git 假装我解决了所有冲突。现在,我不想也无法解决任何冲突。

我需要的是一种方法来告诉 git 类似:“嘿,我不想 merge 任何东西:只获取这个分支中的所有跟踪文件——因为它们出现在最后一次提交中/HEAD,丢弃/删除最新提交之前的前 10 次提交,最后“应用”这些文件作为新提交”:

例如,假设这是所有提交哈希的列表:

1-2-3-4-5-6-7-8-9-10-11-12,其中 HEAD 指向 12。

我想压缩/删除/不管这个操作叫什么,包括 2-11 中的所有提交,以便 git log 之后的最终结果给出:

1-12

其中操作前后的文件必须相同

获取所需内容的命令是什么?

最佳答案

最简单的解决方案(在中止当前 rebase 之后)是:

$ git reset --soft HEAD~10

现在,您的 HEAD 已将十次提交后移,但您的文件都没有更改:它们都将显示为要提交的新更改。

然后,像往常一样提交它们。


这种方法的缺点是您在编写新提交消息时无法访问中间提交消息。

另一种方法是通过指定他们的冲突解决策略,让原始的rebase -i 命令为您工作:

$ git rebase -i -s theirs HEAD~10

虽然首先知道您是如何设法解决冲突会很有趣,rebase -i 通常应该干净地应用。除非这十个提交中的一些本身就是 merge ?

关于Git,如何对 "force"进行 squash rebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293376/

相关文章:

git - 对于 dvcs/git,单个提交是否优于多个小的主题提交?

git - 当一个分支有另一个不想要的恢复时 merge git 分支

git - Bitbucket - 修复 merge 冲突

git - 删除提交git

git - 修改使用 merge 以使用 rebases 的 git 主题分支的历史记录

git - 使用 git稀疏-checkout init 时如何跳过无效路径

git - 当我更改分支时,Netbeans 文件不会刷新

git - 我如何为 GitHub 上的维基页面发出 pull 请求?

git - 确定为什么 github 说 "Closed with unmerged commits"

git - Git squash 的简单方法?