为简化起见,我在git old_repo中有以下结构 "子路径":
subpath/old_commit_1
subpath/old_commit_2
subpath/old_commit_latest
我决定转移到new_repo并复制最新版本的" subpath" (来自old_commit_latest)没有任何提交历史记录。
所以new_repo现在有"子路径"以及我对它做出的一系列新提交:
subpath/new_commit_subpath_added # added subpath here
subpath/new_commit_1
subpath/new_commit_2
subpath/new_commit_latest
现在我需要将所有历史记录从old_repo迁移到new_repo以获取new_repo中的以下树:
subpath/old_commit_1
subpath/old_commit_2
subpath/old_commit_latest
subpath/new_commit_1
subpath/new_commit_2
subpath/new_commit_latest
我该怎么做?
我只需要掌握分支,但我在相同的情况下有很多文件。 old_repo中的子路径和文件名与new_repo中的子路径和文件名匹配。
我想我需要在old_repo中为子路径创建补丁,回滚到new_repo中每个子路径的第一次提交,删除第一次提交,应用补丁,然后在其上重新设置所有新提交。不知道如何做到这一切。将会感激一些帮助。
答案 0 :(得分:1)
您应该将新版本和旧版本都用作有效存储库。旧版本应该更好地在本地机器上,新版本可以在本地或远程(例如,github)。
备份repos和项目总是一个好主意。
我假设旧版本的最后一次提交正是新版本的第一次提交。如果不是这样的话:
.git
以外的文件,但包括.gitignore
和其他git设置。# go to the old repo folder
cd path/to/old
# add the new repo as a remote
git add remote newrepo path/to/new/.git
#check that it's properly added
git remote show newrepo
#fetch data from new
git fetch newrepo
#create a branch "new", tracking
git checkout -b new newrepo/master
#merge changes to the old master
git checkout master
git merge newrepo
#an editor will open with a merge commit message. If you've done the preparations, there should be no merge conflicts.
#this should show a complete history now
git log --oneline
现在您在旧项目目录中拥有联合历史记录和最新提交。