这是我尝试解决问题的方法。您需要修复我的语法错误,并完成自动化问题,但这可能是一个开始。
单行。
git rebase lesson1 lesson2
具有与
相同的效果。
git checkout lesson2
git rebase lesson1
你需要将最后一节课的代码变基到新分支中,以便中间的所有提交都同时转移到新分支。你需要解决任何冲突。
git rebase lesson1 lesson4
然后使用类似以下命令将分支转移到新提交(如果课程是连续的)。
git branch lesson2a lesson4^2
git branch lesson3a lesson4^1
如果分支是连续的。'git help revisions' 显示如何使用提交消息从给定分支找到提交。
git branch lesson2a lesson4^"{/Partial lesson2 commit message}"
git branch lesson3a lesson4^"{/Partial Lesson3 commit message}"
一旦看起来正确了,就删除旧的提交。
git branch -f lesson2 lesson2a
git branch -D lesson2a
请查看“git help rebase”获取rebase语法的信息,以及“git help revisions”获取指定提交方式的不同方法。
filter-branch
所做的,或者更多(因此我的回答采用了这种方法)。Git分支足够简单,以至于我不确定是否应该称其为“累赘”,特别是如果他不时需要返回并修复“错误”的课程。但通常情况下标签会起到同样的作用。(除非他使用变基移动它们时会遇到相同的问题...)你有更简单的想法吗? - Mark AdelsbergerHEAD^{/lesson 3}
来查找提交。 - torekfilter-branch
,但事实证明,对于具有非平凡分支拓扑的历史记录,变基是笨拙的方法。(最终我使用了BFG,但这与此无关...)我只能想到很少几个filter-branch
操作不能用变基来表示,所以我不确定我是否同意它更强大,而更容易处理复杂操作。 - Mark Adelsberger