Git 将多个孤立分支合并为一个分支
我有一个包含多个存储库的目录,它如下所示:Git 将多个孤立分支合并为一个分支,git,Git,我有一个包含多个存储库的目录,它如下所示: folder |- repo1 | |- .git | |- File1.txt |- repo2 | |- .git | |- File2.txt |- repo3 | |- .git | |- File3 我想将它们合并到一个git存储库中,我通过 按照指示 在这些说明之后,我有以下结构: folder |- .git |- repo1 | |- File1.txt |- repo2 | |- File2.txt |- repo3
folder
|- repo1
| |- .git
| |- File1.txt
|- repo2
| |- .git
| |- File2.txt
|- repo3
| |- .git
| |- File3
我想将它们合并到一个git存储库中,我通过
按照指示
在这些说明之后,我有以下结构:
folder
|- .git
|- repo1
| |- File1.txt
|- repo2
| |- File2.txt
|- repo3
| |- File3
这很好。
但现在我有了历史上的主要分支(来自repo1)和两个孤立分支:
* Merge repo3
|\
| * Add third file
* Merge repo2
|\
| * Add second file
* Add first file
我想要的是这样的东西
* Merge repo 3
* Add third file
* Merge repo 2
* Add second file
* Add first file
甚至更好
* Add third file
* Add second file
* Add first file.
这样的事情可能吗?怎么做
有关VonC提供的答案的更多详细信息 我从以下几点开始:
$ git log --graph
* commit 888bb0d7a81a40f8b42da7ad3f02103e898f5c1f
|\ Merge: cf85078 eab1269
| | Author: Bojan Delic <...>
| | Date: Sun Oct 6 13:12:36 2013 +0200
| |
| | Merge repo3
| |
| * commit eab1269be53929450c34c30416820c13a8058678
| Author: Bojan Delic <...>
| Date: Sun Oct 6 13:07:39 2013 +0200
|
| Add third file
|
* commit cf85078ca96d52f2277ad7e4c6f45b04a38cf7ee
|\ Merge: 92fa311 42333f8
| | Author: Bojan Delic <...>
| | Date: Sun Oct 6 13:12:33 2013 +0200
| |
| | Merge repo2
| |
| * commit 42333f8589e20d29e5e444d5e16ff1a5d63b8288
| Author: Bojan Delic <...>
| Date: Sun Oct 6 13:07:09 2013 +0200
|
| Add second file
|
* commit 92fa3113507548a62407431188c308685f72865d
Author: Bojan Delic <...>
Date: Sun Oct 6 13:06:39 2013 +0200
Add first file
之后:
$ git log --graph
* commit 888bb0d7a81a40f8b42da7ad3f02103e898f5c1f
|\ Merge: cf85078 eab1269
| | Author: Bojan Delic <...>
| | Date: Sun Oct 6 13:12:36 2013 +0200
| |
| | Merge repo3
| |
| * commit eab1269be53929450c34c30416820c13a8058678
| Author: Bojan Delic <...>
| Date: Sun Oct 6 13:07:39 2013 +0200
|
| Add third file
|
* commit cf85078ca96d52f2277ad7e4c6f45b04a38cf7ee
|\ Merge: 92fa311 42333f8
| | Author: Bojan Delic <...>
| | Date: Sun Oct 6 13:12:33 2013 +0200
| |
| | Merge repo2
| |
| * commit 42333f8589e20d29e5e444d5e16ff1a5d63b8288
| Author: Bojan Delic <...>
| Date: Sun Oct 6 13:07:09 2013 +0200
|
| Add second file
|
* commit 92fa3113507548a62407431188c308685f72865d
Author: Bojan Delic <...>
Date: Sun Oct 6 13:06:39 2013 +0200
Add first file
$ git branch -a
branch2
branch3
* master
$git日志--图形
*提交888bb0d7a81a40f8b42da7ad3f02103e898f5c1f
|\合并:cf85078 eab1269
|作者:Bojan Delic
||日期:2013年10月6日星期日13:12:36+0200
| |
||合并报告3
| |
|*提交eab1269be53929450c34c30416820c13a8058678
|作者:Bojan Delic
|日期:星期日10月6日13:07:39 2013+0200
|
|添加第三个文件
|
*提交cf85078ca96d52f2277ad7e4c6f45b04a38cf7ee
|\合并:92FA31142333F8
|作者:Bojan Delic
||日期:2013年10月6日星期日13:12:33+0200
| |
||合并报告2
| |
|*提交42333F8589E20D29E544D5E16FF1A5D63B8288
|作者:Bojan Delic
|日期:2013年10月6日星期日13:07:09+0200
|
|添加第二个文件
|
*提交92fa3113507548a62407431188c308685f72865d
作者:Bojan Delic
日期:星期日10月6日13:06:39 2013+0200
添加第一个文件
$git分行-a
分支2
分支3
*主人
您可以在当前的主机上重新设置两个孤立分支的基础(从repo1
)
但是,在你的情况下(在问题中编辑后),有。。。无事可做:
这两个孤立分支已合并到master
这就是为什么rebase只会将它们快速转发到master
。。。因为它们已经合并到master
您可以安全地忽略eab1269
和42333f
:如果它们没有被标记或分支引用,它们将被垃圾收集。
例如,尝试克隆您的repo并查看这些提交是否仍然存在(如果是,请在该克隆上尝试git-gc--aggressive--prune=now
)
注意:git 2.9(2016年6月)将允许您合并孤立分支(仅使用--允许不相关的历史记录
选项:
git merge --allow-unrelated-histories a b
也许我不明白,但是没有branch2,只有master
和HEAD
,它们指向commitMerge repo3
。如果我添加指向commitadd third file
的分支,并按照您的建议进行重基和合并,新分支将移动到Merge repo3
commit,但孤立分支仍然存在ns。@del boy你说有两个孤立分支。所以我把它们称为“branch2
”和“branch3
”。git branch-v
返回什么?是的,我很遗憾有两个孤立分支,因为我发现了这个术语,但除了master之外,没有真正的git分支指向任何地方,指向头部。gitbranch-v
仅返回*master 888bb0d Merge repo3
@del boy然后您可以从找到的两个悬垂分支中的SHA1轻松创建这些分支。git checkout-b branch2 SHA1
@del boy分支是分支(分离、孤立或处于任何其他状态):它有一个头。孤立分支只是一个分支,其第一次提交没有任何父级(不是来自另一个分支),如中所述。如果使用术语“分支”,则表示您知道该分支的头SHA1。
git checkout branch2
git rebase master
git checkout master
git merge branch2 # fast-forward master to branch2
git checkout branch3
git rebase master
git checkout master
git merge branch3 # fast-forward master to branch3
git merge --allow-unrelated-histories a b