Git rebase一个相当大的补丁队列?

时间:2016-10-25 19:02:24

标签: git diff patch rebase

我有一个相当复杂的元层修补程序队列要执行,虽然我已经使用Git大约2年了,但我不会认为自己很精通...

我有一个基本应用程序,我将其称为App,它需要按顺序应用2个元层,所有这些都有自己的Git开发分支。

第一层应用元层ML_A,第二层应用元层ML_B,由于ML_A中的依赖关系被应用于第一层,因此无法在ML_A之前应用ML_B。

元层ML_A有一个广泛的补丁,A01.patch和元层ML_B有一个很长的补丁队列,补丁B01.patch到B90.patch。

我从Meta-layer ML_B中删除了B44.patch和B51.patch,提取了代码,并将其作为Meta-layer ML_A的广泛A01.patch的一部分重新插入。这很耗时,但很简单,ML_A元层可以干净地应用于App,并且可以正常运行。

但是!现在我必须在元层ML_B中修改成千上万行差异补丁代码,以反映更新的元层ML_A对App的更改,因为ML_B和ML_A触摸了很多相同的文件。我知道我可以在接下来的几周内单独应用ML_B补丁并在补丁不适用时更正补丁行号,但我听说有一些时髦的Git命令可以真正加快这个过程。

有人知道这里最好的Git练习是什么吗? Git格式补丁? Git rebase-patch?

1 个答案:

答案 0 :(得分:0)

您的重新排序的修补程序应该通过新B50'生成与B51旧系列相同的结果。因此,如果您没有要求单独保留所有这些内容,则可以通过选择B51的工作树来节省冲突解决方案:

  • 应用原始系列;记住与补丁B51B90
  • 相关的提交
  • git reset --hard $original_commit
  • 应用并提交修改后的A补丁​​
  • git reset --hard B51
  • git reset --soft HEAD@{1}
  • git commit -m 'patches B00-B50, excluding B44' - 提交与原始B51
  • 完全相同的树
  • git cherry-pick B51..B90 - 他们应该干净利落地