使用不同的目录结构在git存储库中移动补丁

时间:2015-02-25 09:36:19

标签: git

对不起这个有点冗长和混乱的标题。我们有一个带有以下目录结构的git存储库(root表示存储库根目录;名称是虚构的):

/
/dir1/
/dir2/
/dir2/subdir1/
/dir2/subdir2/

团队同事创建了一个新的git存储库,其副本为/dir2/subdir1,即/dir2/subdir1成为新存储库的根。我们在新的存储库中做了一些(~15)提交,然后我们决定在旧存储库中复制新的提交。

执行此操作的最佳方法是什么?

当然,我们可以从新的存储库创建一个补丁,并将其作为单个提交应用于旧存储库中,但是这样做会丢失历史记录的粒度。

在同时触及/dir2/subdir1的旧存储库中没有提交,因此肯定不存在冲突。

2 个答案:

答案 0 :(得分:1)

解决方案是使用git format-patchgit am。在新的存储库中我做了一个

git format-patch $revision

,其中$revision是新存储库中的修订版,对应于旧存储库的状态,即添加了/dir2/subdir1的修订版。这创建了大约15个文件,其中包含每个提交的补丁。

然后我移动到旧存储库并使用git am应用刚刚创建的补丁。我只需要指定必须应用这些补丁的目录:

git am --directory dir2/subdir1 $patches

,其中$patches是上一步中创建的文件。

现在提交从新的repo转移到旧的repo,我很高兴!

答案 1 :(得分:-1)

选项1 :分别创建每个提交的补丁(git format-patch),然后应用于旧回购

Option2 :将新的repo添加为旧的repo,获取分支,Checkout本地repo上的分支并挑选所有提交(使用gitk它更容易`)

Option3 :将新仓库添加为远程仓库,获取分支,并将其与旧仓库中的分支合并。

希望它有所帮助!