很久以前,我在 github 上分叉了一个 repo,并对几个不相关的功能做了相当多的更改,当时我对 git 基本上一无所知,所以我的提交基本上只是“自上次以来我碰巧做过的事情”我记得提交的时间是”。我想向上游贡献一些更改,但在我的存储库当前状态下这是不可能的。现在我实际上已经使用 git 足够长的时间来适应它,并且更加了解良好的实践,是否可以重写我的整个提交历史记录,以分解少量的大型提交,每个提交都包含许多不相关的更改,分成更小的单独提交,仅包含相关更改?如果没有别的事,我可以删除 Github 上的分叉,重新分叉,用我当前的本地副本覆盖所有内容并运行一堆部分提交,但如果有更好的方法那就太好了。
是的,可以重写整个历史......但对于您的情况,您不必这样做。您只需要重写您所处理的部分即可。这可能只是您的更改master
分支。为此,您可以对之间的所有更改进行交互式变基master
and origin/master
这就是他们的上游。
要做到这一点,首先结帐主,然后git rebase -i origin/master
。这会将您带入一个编辑器,您可以在其中选择对每次提交执行的操作。您可能想要编辑它们(e
)。保存文件后,Git 将依次检出每个更改,您可以使用它执行您喜欢的操作。
如果您想拆分提交,请使用git add -p and git add -i https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging将更改一次添加到暂存区域,然后git commit
仅提交更改的一部分。
欲了解更多详细信息,请阅读在 Pro Git 中重写历史 https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History和 Github 的关于 Git 变基 https://help.github.com/articles/about-git-rebase/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)