我有两个分支A和B.
我从分支B提前约200个提交的位置开始。
同时,分支A中的许多文件已被移动,例如来自src/org/**
的Java文件被移动到module1/src/main/java/org/**
,而非Java文件被移动到module1/src/main/resources/**
。
我有一个所有移动的文件夹和文件的列表。
我想在分支A上面重新设置分支B.通常我会做类似的事情:
git fetch upstream && git checkout B && git rebase upstream/A
但是,由于分支B既添加了新文件又修改了src/org
中的现有文件,但这并不完全适用,但其中一些文件已在分支A中移动(使用git mv
)。
是否有一种方法可以告诉git关于所有移动的路径在进行rebase时,例如当你在src/org
中创建一个新文件时,现在在module1/src/main/java/org
中创建它?
或者最好的方法是使用git format-patch
从Branch B创建一个大的补丁集,然后在将它们应用到A的新分支之前,在所有补丁文件中进行查找和替换以更新路径?
或许完全有另一种方式?
如果你尝试使用git checkout a && git rebase b
,你会得到git混淆的文件,对吧?
为了最大限度地减少因为重命名而git因为保留两个分支而混淆的时间...我想我会尝试一个双循环......事实上,它甚至是一个好的git脚本的一个想法....说A是B和C之间的转移点...说A和B之间有5个修改,A和C之间有20个修订。
而不是在B之上重新定位C,我首先基于B~4的顶部,然后在B~3之上重新生成结果分支,然后再在B~2之上,然后B~1,最后在顶部B.它正在重做很多工作,但是当你试图匹配你移动的文件时,git可能会变得更少混淆....而且通常做的速度比抓住你的手指要快得多,所以它不应该太痛苦。
最后我做了:
这是相对无痛的,可惜通过组合rebase / filter没有更好的方法。