来自不同回购的rebase git repo

时间:2013-11-26 17:28:18

标签: git

我需要从不同的回购中重新设置我的git repo。并且不要将不同的repo添加为子树。不同的仓库改变了我在本地仓库中处理的相同文件。 (不要问我们为什么不在一个回购[政治]中将回购单位统一到不同的分支。)

我的回购和共同回购分别。

A-B-C-d

A-B-C-W-X-Y-Z

我的回购需要成为

A-B-C-W-X-Y-Z-d

记住它是一个不同的回购,而不仅仅是一个不同的分支。我追求的策略是通过这些命令从公共仓库添加一个分支到我的仓库

远程添加common-repo ssh:/ path / to / common / repo

然后我在我的" git remote -v"中看到了共同的回购。命令。但我在我的" git branch -v"中看不到它。命令。如果我可以将其转换为分支,执行rebase / merge,然后删除分支或从不推动分支,那么我将从该共同仓库重新设置我的仓库。

当然,我希望我自己的回购保留共同回购所拥有的所有历史记录,而不是折叠合并。

3 个答案:

答案 0 :(得分:1)

我假设有一个共同的父母,因为你曾经使用过两次字母,我认为你可以通过将第二个回购添加为另一个远程来实现这个目标

git remote add second_origin URL

然后获取第二个远程

git fetch second_origin

然后进行rebase

#assuming you are on origin/master
git rebase second_origin/master master

我不确定这会起作用,但对我而言,它似乎在逻辑上是正确的,请记住,如果整个底板变得疯狂并且你发现自己陷入困境,你可以随时运行git rebase --abort

答案 1 :(得分:0)

要查看远程分支,您应该使用以下方法之一:

git branch -a
git branch -r

而不是

git branch -v

一旦你可以看到,例如,分支遥控器/ origin / master,那么,在你应该这样做的基础上重新设置你的主分支:

git checkout master
git rebase origin/master

答案 2 :(得分:0)

我假设提交a,b和c相同但不相同。在这种情况下,您只需从其他仓库中取货

git fetch otherrepo

然后你将你的工作重新定位到最后一个公共部分c

git rebase --onto otherrepo/c ^myrepo/d myrepo/d

因为它是一次提交,在这种情况下,樱桃选择会做

git checkout otherrepo/c
git cherry-pick myrepo/d

用您创建的分支替换repo / commit标记以表示它们。以上将更容易处理。

如果你打算以这种方式使用这个其他仓库,我会建议你合并并启用rerere,因为你将永远无法发布你的合并,并且你身边的合并将变得越来越复杂。 Rerere将允许您快速执行此操作,因为将来会记住任何冲突解决方案。