git - 重写整个 git 历史

标签 git github

很久以前,我在 github 上 fork 了一个 repo,对几个不相关的功能做了很多更改,当时我对 git 基本上一无所知,所以我的提交基本上只是“自那以后我碰巧从事的工作”每当我最后一次记得提交是”。我想在上游贡献我的一些更改,但我的 repo 协议(protocol)处于当前状态是不可能的。现在我实际上已经使用 git 足够长的时间来适应它,并且更加了解良好实践,是否有可能重写我的整个提交历史记录以分解少量的大提交,每个提交包含许多不相关的更改,变成更小的个人提交,只包含相关的更改?如果不出意外,我可以删除 Github 上的 fork ,重新 fork ,用我当前的本地副本覆盖所有内容并运行一堆部分提交,但如果有更好的方法那就更好了。

最佳答案

是的,重写整个历史是可能的……但对于您的情况,您不必这样做。您只需要重写您处理的部分。这可能只是对 master 分支的更改。为此,您可以对 masterorigin/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/

相关文章:

github - 如何在 github pull request 中选择/评论一系列行?

php - 使用Open Graph协议(protocol)提取og :image source

github - 使用 Github 部署方法的 GitHub token 的 Heroku 问题

git - 如何将其他文件添加到 Chocolatey 包中?

git - Visual Studio Git 错误 : "The index is locked. This might be due to a concurrent or crashed process."

git - 撤消 git rebase --skip - 在 rebase 期间重新应用提交

git - 无法单击始终允许 git-credential-osxkeychain pop 窗口

git - 将新创建的特定文件夹添加到 Git 中的 .gitignore

android - 从android studio将项目添加到github时出错

git - 无法使用 VS 2015 和 GIT 将文件添加到源代码管理