将之前的一次提交拆分为多个提交

1758

在不创建分支以及在新分支上进行大量工作的情况下,是否有可能在将提交保存到本地仓库后将单个提交分成几个不同的提交?


68
学习如何进行此操作的好资料是 Pro Git §6.4 Git 工具 - 重写历史,其中包括“拆分提交”一节。 - user456814
7
上面评论中链接的文档非常好,比下面的回答更好地解释了问题。 - Blaisorblade
3
我建议使用这个别名 https://dev59.com/Smct5IYBdhLWcg3wCZMT#19267103。它允许使用 git autorebase split COMMIT_ID 命令来拆分提交。 - Jérôme Pouiller
2
没有交互式变基最简单的方法可能是从要拆分的提交之前的提交开始创建一个新分支,cherry-pick -n提交,重置,stash,提交文件移动,重新应用stash并提交更改,然后将其与以前的分支合并或cherry-pick后续提交。 (然后将以前的分支名称切换为当前头。)(最好遵循MBO的建议进行交互式变基。)(摘自下面的2010年答案) - William Pursell
3
我在之前的提交中,在rebase期间意外压缩了两个提交,导致出现了问题。我的解决方法是检出被压缩的提交,然后执行git reset HEAD~git stash,接着使用git cherry-pick来挑选压缩中的第一个提交,最后再执行git stash pop。虽然我的cherry-pick情况比较特殊,但是git stashgit stash pop对于其他情况也非常方便。 - SOFe
21个回答

0
如果你正在使用GitKraken,有一种简单的方法,但它并不是非常直接。相信我,它看起来比实际复杂。 (注意:与重新排序或压缩相同,在你已经推送到源代码库之后不要这样做)。
  1. 检出你想要拆分的提交之前的提交,这将创建一个HEAD标签
  2. 挑选你的提交,回答“否”以回答是否要立即提交的问题
  3. 根据更改创建所需数量的提交
  4. 挑选所有后续提交,回答“是”以保留你的提交消息
  5. 现在使用右键从你的HEAD创建一个新分支
  6. 切换回你的原始分支
  7. 使用hard重置分支到最后一个公共提交,原始提交将消失
  8. 将新分支重新基于原始分支(仍然在原始分支上,右键点击新分支,选择rebase)
  9. 现在可以删除新分支了

完成。告诉过你,它看起来比实际复杂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接