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