在 master 分支中,创建多个起始 commit(它们都没有 parent)。
仓库地址为 git://github.com/ossxp-com/gitdemo-commit-tree.git
,示意图如下 ↓
这该如何实现?
这也许是个很简单的要求,但我真的想了很长时间,也没搞清楚到底怎么做,所以来寻求帮助。
问题已经解决,感谢 @Kobayashi !
可以通过下列命令重现:
Remove-Item '*' -Force
'.git'| Remove-Item -Force -Recurse
git init
'text' > "A.txt"
git add -A;git commit -a -m 'A'
git checkout --orphan 'new_branch'
'text' > "B.txt"
git add -A;git commit -a -m 'B'
git checkout master
git merge --no-ff --allow-unrelated-histories 'new_branch'
git log --all --decorate --oneline --graph
PS>git log --decorate --oneline --graph
* 3805411 (HEAD -> master) Merge branch 'new_branch'
|\
| * b2af1fd (new_branch) B
* 70e2a07 A
感谢 @clrss 提供了另一种方法!
使用 git subtree add
的确可以实现多个根 commit。
PS>git log --all --decorate --oneline --graph
* 50f7c25 (HEAD -> master) Add 'new_pre/' from commit '47b72dbdebd593bde75a80df7ff28544b2982ff1'
|\
| * 47b72db (new_branch) B
* fd9bb52 A
这个命令好像用的不是太多,之前从来没见过。
它好像是将两个 commit 合并之后,然后将结果放到子文件夹中。
⚠ 如果看工作树的具体细节,会发现合并之后的结果与给出的仓库有很大出入。
Git\TDS\temp
├──new_pre
│ ├──A.txt
│ └──B.txt
└──A.txt
1
baiyi 2021-08-23 11:06:52 +08:00
一个分支只能有一个起始 commit,你的需求是不是可以换个思路解决。比如多个分支?
|
2
JKeita 2021-08-23 11:08:57 +08:00
一个分支怎么可能多个根节点。
|
3
AlphaTr 2021-08-23 11:08:57 +08:00
git checkout --orphan 加个参数?
|
4
AndyAO OP @baiyi #1
**已经有这样的仓库存在,图片和具体地址,问该如何实现。** 上述仓库已经多个起始 commit 吗,从图上可以很明显的看出来,而且已经测试过那 5 个节点,根本都没有 parent 。 |
6
Kobayashi 2021-08-23 11:10:56 +08:00 1
你没理解分支,这明显是多个分支合并的结果。
1. 创建多个无共同父节点分支,又称孤儿分支。 git checkout --orphan branch-name 2. 合并分支 git merge --no-ff --allow-unrelated-histories branch-name |
9
Kobayashi 2021-08-23 11:16:09 +08:00
> 这是在相同的分支内发生的事情,不涉及到其他的分支啊,所以孤儿分支没什么呢。
@AndyAO 没明白你在说什么。正常分支是要求有共同父节点的。这几个有多个起点,其他几个分支不可能是从主分支创建出来的,必然是多个孤儿分支合并结果。 |
10
clrss 2021-08-23 11:18:56 +08:00 1
git subtree add
|