代码之家  ›  专栏  ›  技术社区  ›  Henrik Paul

Git的octopus合并有反作用吗?

  •  4
  • Henrik Paul  · 技术社区  · 17 年前

    Git有一个备受吹捧的章鱼合并功能,可以将多个头合并成一个。

    但是,是否有什么东西会适得其反,从一个节点中同时创建多个分支?

    假设我有一堆项目代码,我刚刚开始使用Git。该项目中的一些功能已经完成,其他功能仍在开发中。我想把那些未完成的功能移到自己的位置 分别的 分离 分支,并使主代码尽可能“完整”,没有未完成的代码。

    现在,我当然可以一步完成所有这些:创建一个“未完成的功能#1”分支,并从主控中删除特定于该功能的文件。然后,我将主文件重新分支为“未完成的功能#2”,并再次从主文件中删除功能#2特定的文件,同时也从第一个分支中删除。因此,每次拆分都会增加工作量。

    在这种情况下,有什么能帮助我吗?

    3 回复  |  直到 17 年前
        1
  •  11
  •   finpingvin    14 年前

    附注: 这个 章鱼合并 以及 章鱼分支点 场景非常不同。请记住,提交的DAG(有向无环图)中的指针从子(较新的提交)指向父或父。就章鱼而言 合并 你有一个commit(commit对象),它有两个以上的父母;在“octopus branchpoint”的情况下,你只需要有几个提交指向与其父级相同的提交。

    章鱼合并:

    1 <---- M
    2 <----/ |
    3 <------|
    

    章鱼分支点:

    P <----- 1
    ^-------- 2
    ^-------- 3
    

    所以我认为这个问题的命名是错误的


    答案

    现在,如果你想在不同的分支之间分割工作区域中的修改,将每个功能放在单独的主题分支中,你可以使用显式 暂存区域 Git中的索引。

    假设您修改了两个文件“a”和“b”,并且您希望修改文件“a)以转到分支“a”,修改文件“b”以转到分支”“b”。假设您当前所在的分支,即您要创建的许多分支的基础分支点,名为“master”。

    首先,让我们创建分支“A”

    $ git checkout -b A master
    

    Git回复如下:

    M       a
    M       b
    Switched to a new branch "A"
    

    “M”表示文件“a”和“b”相对于分支“a”所基于的点(“主”分支)进行了修改。(下面,我将简单地将git响应放在命令行调用下面,而不是单独注明什么是回复。)

    让我们将文件“a”的内容添加到暂存区(索引)。

    $ git add a
    

    请注意,如果您只想将文件“a”中的一些更改子集添加到分支“a”中,您可以使用“git add--interactive”(缩写为“-i”)或“git gui”对分段区域进行逐块添加更改和其他此类操作。

    现在我们将更改提交到分支“A”

    $ git commit
    Created commit 35d0061: Commit description...
     1 files changed, 1 insertions(+), 0 deletions(-)
    

    笔记 我们 没有 使用“-a”选项进行git提交!

    顺便说一句,如果你想在从暂存区出来之前测试更改,你可以使用“git stash save--keep index”将工作区设置为使用“git commit”提交的状态,测试更改,然后使用“git tash pop--index”(或“git stash-pop”;我不记得你在这里需要哪一个)返回到之前的状态。

    现在,我们基于分支“master”创建另一个分支“B”

    $ git checkout -b B master
    M       b
    Switched to a new branch "B"
    

    您可以很容易地看到,您为分支“B”留下的更改(您没有提交到分支“A”的更改)将转到新创建的分支“B“。无需删除文件或删除更改。无需了解其他分支的内容。一切都是自动的。
    再次将文件'b'的内容添加到暂存区(索引),并在分支'b'上提交:

    $ git add B
    $ git commit
    

    您可以根据需要经常重复此操作,并且 does not 的常用口语形式 对新的分支更加努力。

    人酪氨酸羟化酶

        2
  •  1
  •   Paul    17 年前

    由于你刚刚开始使用Git,重新开始会更容易,只需将你的“完整”代码提交到Master分支即可。然后从主节点签出一个新的分支来获取一个功能,并将“未完成”的功能代码提交到自己的分支上。对每个特征分支重复此操作。

    你必须将代码划分为功能并“完成”,所以用它来设置你的存储库。