如何将一些git commits转移到新的repo中?

wgx48brx  于 12个月前  发布在  Git
关注(0)|答案(4)|浏览(121)

我正在使用这个rest-more存储库,它包含了许多web api的实现(比如Facebook或Linkedin)。我分叉了这个存储库,并在我的分支中添加了我自己的另一个web api的实现。
然而现在我发现很难保持与原始仓库的更新。每次原始仓库更改时,我都会重基我的分支,这非常繁琐。所以我想将我自己的实现拆分到一个独立的仓库中。
我所有的提交都集中在我的分支中,只有一个提交涉及到了原始仓库中的文件。
有没有简单的方法可以将我的提交移到一个新的仓库中?我想这样做,这样我就可以保留我的提交历史。

tyg4sfes

tyg4sfes1#

最佳:停止接受来自原始仓库的更新。从.git/config文件中删除远程仓库。
否则,从我的笔记:
假设您要将目录1从存储库A移动到存储库B
克隆仓库A。为了安全起见,我们断开克隆和A之间的链接,以确保我们的更改不会意外地被发送回来。

git clone git://git.foo.com/ProjectA.git NewProject
cd NewProject
git remote rm origin

字符串
把所有的东西都去掉,除了dir 1

git filter-branch --subdirectory-filter dir1


这将使dir 1成为新的根目录,您可能希望撤消此操作:

mkdir dir1
mv * dir1
git commit -a


现在将此存储库合并到存储库B

git clone git://git.foo.com/ProjectB.git ProjectB
cd ProjectB
git remote add repo-A-branch ~/NewProject
git pull repo-A-branch master
git remote rm repo-A-branch

lrl1mhuk

lrl1mhuk2#

我会建议保持一个单一的存储库,并为您的更改创建第二个分支。然后,您可以**cherry pick您的提交**到这个新的分支,以隔离您的更改,并将上游更改和您的更改合并/重定基到第三个分支中,以创建您的代码版本。将其保持在一个存储库中可以更容易地与上游开发保持同步,并且将您的更改放在它们自己的分支上允许您将它们保持隔离。第三个分支可以作为“您的更改应用到上游代码”的分支。

bhmjp9jg

bhmjp9jg3#

假设你有严格的线性提交历史(没有合并),你可以简单地导出所有的提交,如下所示:

git format-patch <start>..<stop>

字符串
其中startstop是你需要的提交范围(start是你开始的提交,stop可能是当前的HEAD)。
这将创建许多名为NNNNN-commit-description.patch的文件,NNNNN是从00001开始的数字。
然后,创建新的空存储库并导入这些补丁:

git init newrepo
cd newrepo
find <oldrepo>/*.patch | xargs git am


此外,与其从空的repo开始,你可能想用你依赖的一些原始文件进行第一次提交,这样你所有的补丁都可以干净地应用。

ffx8fchx

ffx8fchx4#

首先打开一个新的repository:

git init new-repo

字符串
然后,我将我的分支推到该存储库:

cd rest-more
git push ../new-repo/ my_branch

cd ../new-repo
git co my_branch


我创建了一个新的空初始提交:

git checkout --orphan newroot
git commit --allow-empty -m 'root commit'


然后我将我的分支重基到这个起点,使用交互式标志来只选择我的提交:

git rebase --onto newroot --root my_branch -i


需要在途中解决冲突,最后我得到了一个只有我提交的存储库。
(可能还需要改进,请随意提出任何建议。)

相关问题