我正在尝试将两个独立的提交树连接到一个存储库中。
最初我有:
A--B--C--D (master1)
E--F--G--H (master2)
\
I--J (somebranch)
这些树没有共同的祖先,彼此独立(不同的文件和目录)。 我想将master2和somebranch(实际上可能是多个分支)重新绑定到master1。
通过以下方式对单个分支进行重新定位很容易:
#simple reabse:
git checkout master2
git git rebase master1
会给我:
A--B--C--D (master1)
\
E'--F'--G'--H' (master2)
E--F--G--H
\
I--J (somebranch)
最好我想要一个命令同时移动两个(或更多)分支,以得到这样的结果:
A--B--C--D (master1)
\
E'--F'--G'--H' (master2)
\
I--J (somebranch)
答案 0 :(得分:1)
您可以使用一种鲜为人知的称为移植物的功能将历史记录拼接在一起。
$ echo `git rev-list [E] -1` `git rev-list master1 -1` > .git/info/grafts
$ git filter-branch --tag-name-filter cat master2 [other branches]
或者,如果涉及多个分支,并且您不想将它们全部列出,则可以执行以下操作:
$ git filter-branch --tag-name-filter cat `git show-ref --heads | awk '{print $2}'`
(有关详细信息,请参阅answer 161928或blog article或advanced instructions)
答案 1 :(得分:0)