很久以前,我在 github 上 fork 了一个 repo,对几个不相关的功能做了很多更改,当时我对 git 基本上一无所知,所以我的提交基本上只是“自那以后我碰巧从事的工作”每当我最后一次记得提交是”。我想在上游贡献我的一些更改,但我的 repo 协议(protocol)处于当前状态是不可能的。现在我实际上已经使用 git 足够长的时间来适应它,并且更加了解良好实践,是否有可能重写我的整个提交历史记录以分解少量的大提交,每个提交包含许多不相关的更改,变成更小的个人提交,只包含相关的更改?如果不出意外,我可以删除 Github 上的 fork ,重新 fork ,用我当前的本地副本覆盖所有内容并运行一堆部分提交,但如果有更好的方法那就更好了。
最佳答案
是的,重写整个历史是可能的……但对于您的情况,您不必这样做。您只需要重写您处理的部分。这可能只是对 master
分支的更改。为此,您可以对 master
和 origin/master
之间的所有更改进行交互式 rebase ,这是他们在上游所做的。
为此,首先检查 master,然后 git rebase -i origin/master
。这会将您带到一个编辑器中,您可以在其中选择对每个提交执行的操作。您可能想要编辑它们 (e
)。保存文件后,Git 将依次检查每个更改,您可以随心所欲地使用它。
如果要拆分提交,请使用 git add -p
and git add -i
一次将更改添加到暂存区,然后 git commit
仅提交更改的一部分。
有关更多详细信息,请阅读 Rewriting History in Pro Git和 Github 的 About Git Rebase .
关于git - 重写整个 git 历史,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493644/