我有 8 个提交的“主”存储库
Main 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
我想创建一个 BranchA 并在其上移动提交 6、7、8:
Main 1 - 2 - 3 - 4 - 5
BranchA \ 6 - 7 - 8
然后在 main 中继续:
Main 1 - 2 - 3 - 4 - 5 - 9 - 10 - 11
BranchA \ 6 - 7 - 8
是否有直接执行此操作的命令?
如果不是,获得它的最佳顺序是什么?
答案 0 :(得分:1)
这里要理解的是,Git 中的分支不是事物。它们不是地点、提交的集合或历史。它们只是名字。分支是当前附加到某个提交的名称;并且它是可移动的,因此可以根据需要将其附加到其他提交。要“创建分支”,只需创建一个名称并将其指向 - 默认情况下指向我们现在所在的位置。
而 HEAD
是一个更简单的名字;它只是(通常)指向您工作的分支名称。
所以,正如评论中已经解释的那样:你有
1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 <- main <- HEAD
所以 main
指向 8,我们 在 8。所以现在说 git branch branchA
。现在你有
1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 <- main <- HEAD, branchA
两个分支名称都指向 8。请注意,您仍在 main
上;您没有结帐 branchA
所以 HEAD
仍然指向 { {1}}。
由于 main
现在看起来完全符合您的需要,您现在只需说 branchA
即可移动 main
。这只是抬起 git reset --hard HEAD~3
指针并移动它,因此它给出:
main
但这在拓扑上与您想要的相同:
main <- HEAD
|
v
1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 <- branchA
您仍然在 1 -- 2 -- 3 -- 4 -- 5 <- main <- HEAD
\
-- 6 -- 7 -- 8 <- branchA
上,所以继续工作:添加并提交,添加并提交。
main
与此同时,1 -- 2 -- 3 -- 4 -- 5 -- 9 -- 10 <- main <- HEAD
\
-- 6 -- 7 -- 8 <- branchA
坐在那里守着你 8 点的老地方。