我怎么能分裂一个埋在历史的Git犯?

我忽略了自己的历史,想对它做一些改变。 问题是,我有一个提交了两个不相关的更改,这个提交被本地(非推送)历史中的一些其他更改所包围。

在我推出之前,我想分解这个提交,但是我看到的大多数指南都与分离最近的提交或未提交的本地更改有关。 这么做是否可行呢,是否可以把这个事情埋在历史的一点点,而不必从那时起“重做”我的承诺呢?

有一个指导来分裂rebase的manpage中的提交。 简要总结是:

  • 执行包括目标提交(例如, git rebase -i <commit-to-split>^ branch )的交互式rebase并将其标记为要编辑。

  • 当rebase达到那个提交时,使用git reset HEAD^重置到提交之前,但保持工作树不变。

  • 逐步添加更改并提交它们,根据需要进行尽可能多的提交。 add -p可以用于添加给定文件中的一些更改。 如果您想要将原始提交消息重新用于某个提交,请使用commit -c ORIG_HEAD

  • 如果你想testing你正在提交的东西(好主意!),使用git stash来隐藏你没有提交的部分(或者甚至在提交之前stash --keep-index ),testing,然后git stash pop其余的则返回工作树。 继续提交,直到你完成所有修改,即有一个干净的工作树。

  • 运行git rebase --continue – 继续在now-split commit之后应用提交。

如果你还没有推,只要使用git rebase 。 更好的是,使用git rebase -i以交互方式移动提交。 您可以将违规提交移到前面,然后按需要将其分开,然后将补丁移回(如果需要)。