想象一下这个git历史:
/-----/------- feature
---o-----o-----x oldrepo/master
*-- newrepo/master
Jun Jul Sep
我在六月份从大师那里剪了一个功能分支,并在夏天开始工作。
9月,我们在master上提取了部分文件树并将其转换为自己的repo(这个新的repo包含了我的功能中的所有文件,等等)。我们使用git subtree
,因此新的repo具有已移动文件的所有原始历史记录。然后在旧的仓库中git rm
编辑了那组文件。
现在我想以某种方式将我的功能分支移动到新的repo,以便它最终可以登陆新的repo的主分支。旧回购中的功能分支可能会在之后死亡。
使用git log
,我确定了41个重要的提交。其中一个,在中间,是我将大师合并到我的功能中,所以我不落后;它包含了大量的提交文件,这些文件不属于新的repo(在子树之外)。
我已经尝试使用git format-patch
为我关心的40次提交生成补丁,但git am commit01.patch
在新的repo中失败有两个原因(或者至少,我可以识别两次):
我能够通过对补丁文件进行一些批量查找/替换工作来解决第一个问题,因为路径转换很简单。但是git am
可以预测并不喜欢我正在尝试将更改重播到自记录这些更改以来发展的文件中。
我有点不知道如何继续。
理想情况下,我想避免重新做这项工作。也就是说,补丁文件显然为我提供了足够的信息,如果有必要的话。
非常感谢任何帮助。