对不起这个有点冗长和混乱的标题。我们有一个带有以下目录结构的git存储库(root表示存储库根目录;名称是虚构的):
/
/dir1/
/dir2/
/dir2/subdir1/
/dir2/subdir2/
团队同事创建了一个新的git存储库,其副本为/dir2/subdir1
,即/dir2/subdir1
成为新存储库的根。我们在新的存储库中做了一些(~15)提交,然后我们决定在旧存储库中复制新的提交。
执行此操作的最佳方法是什么?
当然,我们可以从新的存储库创建一个补丁,并将其作为单个提交应用于旧存储库中,但是这样做会丢失历史记录的粒度。
在同时触及/dir2/subdir1
的旧存储库中没有提交,因此肯定不存在冲突。
答案 0 :(得分:1)
解决方案是使用git format-patch
和git 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 :将新仓库添加为远程仓库,获取分支,并将其与旧仓库中的分支合并。
希望它有所帮助!