我怎么能分裂一个埋在历史中的Git提交?
我忽略了自己的历史,并想对其做一些改变。 问题是,我提交了两个不相关的更改,并且此提交被本地(未推送)历史记录中的其他更改所包围。
我想在推出之前拆分这个提交,但是我看到的大多数指南都与拆分最近的提交或未提交的本地更改有关。 对于一个埋在历史中的提交来说,这样做是否可行,而不必从那时起“重新执行”我的提交?
有一个指导来分裂rebase manpage中的提交。 简要总结如下:
执行包括目标提交(例如git rebase -i <commit-to-split>^ branch
)的交互式底图并将其标记为要编辑。
当rebase达到该提交时,使用git reset HEAD^
重置为提交之前,但保持工作树完好无损。
逐步添加更改并提交它们,根据需要进行尽可能多的提交。 add -p
可用于在给定文件中仅添加一些更改。 如果您想为某个提交重新使用原始提交消息,请使用commit -c ORIG_HEAD
。
如果你想测试你正在提交的东西(好主意!),使用git stash
来隐藏你没有提交的部分(或者甚至在你提交之前stash --keep-index
),测试,然后git stash pop
to其余的则返回工作树。 继续提交,直到你完成所有修改,即有一个干净的工作树。
运行git rebase --continue
- 继续在now-split commit之后应用提交。
如果你还没有推送,只需使用git rebase
。 更好的是,使用git rebase -i
以交互方式移动提交。 您可以将违规提交移到前面,然后按需要将其拆分,然后将补丁移回(如果需要)。
上一篇: How can I split up a Git commit buried in history?
下一篇: What's the difference between HEAD, working tree and index, in Git?