Git有一个备受吹捧的(?)章鱼合并功能,可以将多个头合并为一个.
但有没有相反的东西,从一个节点中同时分支?
我们假设我有一堆项目代码,我刚开始使用Git.该项目中的一些功能已完成,其他功能仍在进行中.我会希望是让搬进自己的那些未完成的功能,相应的和独立的分支,有主的"完整"地,没有未完成的代码.
现在,我当然可以通过一步完成所有这些操作:创建"未完成的功能#1"分支,并从主服务器中删除特定于该功能的文件.然后我将主人重新分支到"未完成的功能#2"并再次从主服务器中删除功能#2特定文件,但也从第一个分支中删除.因此,每次拆分工作量都会增加.
在这种情况下,有什么东西可以帮助我吗?
Jak*_*ski 11
附注:在章鱼合并和章鱼分支点的情况有很大的不同.请记住,提交的DAG(有向无环图)中的指针指向从子(较新的提交)到父或父.因此,在章鱼合并的情况下,你有提交(提交对象),它有两个以上的父母; 在"章鱼分支点"的情况下,您只需要一些提交指向与其父级相同的提交.
章鱼合并:
1 <---- M
2 <----/ |
3 <------|
Run Code Online (Sandbox Code Playgroud)
章鱼分支点:
P <----- 1
^-------- 2
^-------- 3
Run Code Online (Sandbox Code Playgroud)
所以我认为这个问题的命名是完全错误的
现在,如果您要做的是在不同分支之间拆分工作区域中的修改,将每个特征放在单独的主题分支中,您可以在Git中使用显式分段区域(也就是索引).
假设您修改了两个文件'a'和'b',并且您希望修改文件'a'转到分支'A',并修改文件'b'转到分支'B'.让我们假设你当前所在的分支,你想要成为许多分支的基础的分支点,被命名为"master".
首先,让我们创建分支'A'
$ git checkout -b A master
Run Code Online (Sandbox Code Playgroud)
Git回复:
M a
M b
Switched to a new branch "A"
Run Code Online (Sandbox Code Playgroud)
"M"表示文件'a'和'b'相对于基于分支'A'的点('master'分支)进行修改.(下面,我将简单地将git响应放在命令行调用之下,而不是单独注意什么是回复.)
让我们将文件'a'的内容添加到临时区域(索引).
$ git add a
Run Code Online (Sandbox Code Playgroud)
请注意,如果您只想将文件"a"中的某些更改子集添加到分支"A",则可以使用"git add --interactive"(缩写为"-i")或"git gui"来执行大块添加对暂存区域和其他此类操作的更改.
现在我们对分支'A'进行更改
$ git commit
Created commit 35d0061: Commit description...
1 files changed, 1 insertions(+), 0 deletions(-)
Run Code Online (Sandbox Code Playgroud)
请注意,我们没有使用'-a'选项进行git-commit!
顺便说一句,如果你想在从暂存区域进行测试之前测试更改,你可以使用"git stash save --keep-index"来使用"git commit"获得你要提交的状态的工作区,测试更改,然后使用"git stash pop --index"(或"git stash pop"回到以前的状态;我不记得你在这里需要哪一个).
现在我们创建另一个分支,分支'B',基于分支'master'
$ git checkout -b B master
M b
Switched to a new branch "B"
Run Code Online (Sandbox Code Playgroud)
您可以很容易地看到您为分支"B"所做的更改(您未提交到分支"A"的更改)将转到新创建的分支"B".无需删除文件或删除更改.不需要知道其他分支是什么.一切都是自动的.
再一次,将文件'b'的内容添加到临时区域(索引),并在分支'B'上提交:
$ git add B
$ git commit
Run Code Online (Sandbox Code Playgroud)
您可以根据需要经常重复此操作,并且新分支不会变得更难.
HTH