使用许多移动文件在repo顶部进行rebase的最佳方法是什么?

问题描述 投票:0回答:2

我有两个分支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 rebase
2个回答
0
投票

如果你尝试使用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可能会变得更少混淆....而且通常做的速度比抓住你的手指要快得多,所以它不应该太痛苦。


0
投票

最后我做了:

  1. git checkout B
  2. git format-patch -o patches / HEAD~198
  3. 整个装载的Sed对着补丁
  4. git checkout A
  5. git checkout -b new-B
  6. git am -3 patches / *

这是相对无痛的,可惜通过组合rebase / filter没有更好的方法。

© www.soinside.com 2019 - 2024. All rights reserved.