git 将历史记录从快进重写为非快进

git rewrite history from fast-forward to no-fast-forward

所以我在 Android 项目上工作了一段时间,从事后端和本机客户端开发。该项目从那时起取得了一些进展,我是唯一的项目提交者,所以我基本上快进合并了我添加或修复的所有内容。现在我的公司需要一名新的 Android 开发人员,并将我拉到后端团队。我想重写我的 android 回购历史并显示已添加/修复/发布的功能等等。所以我希望我的快进线性提交历史以非快进类型的形式重写。这可能吗?

通过查看 git reflog 的输出,或通过 grep:

git reflog --date=iso | grep -i Fast-forward

可以找到快进导致的 'merge' 次提交:

b69e480 HEAD@{422}: merge b69e480: Fast-forward
38e2ace HEAD@{438}: merge 38e2ace: Fast-forward

然后应该可以恢复这些分支,并通过 --no-ff 标志重新合并它们,方法是首先重新绕 HEAD 回到正确的起点。

这里有 a related blog,展示了如何恢复错误的合并,它使用了相同的方法,这可能是一个很好的例子。