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

Git的八达通合并有相反的结果吗?

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

    Git有一个广受吹捧的(?)八达通合并功能,可以将多个头合并成一个。

    但是,是否有相反的方法,从一个节点同时生成几个分支?

    让我们假设我有一堆项目代码,我刚刚开始使用Git。该项目中的一些功能已完成,其他功能仍在进行中。我想要的是将那些未完成的功能移到它们自己的功能中 分别的 分离

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

    2 回复  |  直到 15 年前
        1
  •  11
  •   finpingvin    12 年前

    旁注: 这个 章鱼支点 情况大不相同。请记住,提交的DAG(有向无环图)中的指针从子(较新的提交)指向父或父。章鱼的情况也是如此 合并

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

    八达通支点:

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

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


    现在,如果您想做的是在不同的分支之间分割工作区域中的修改,将每个特性放在单独的主题分支中,那么您可以使用显式 集结区 (又名索引)以吉特为单位。

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

    $ 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 stash 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
    

    您可以根据需要经常重复此操作,并且 在新的分支机构中更加努力。

        2
  •  1
  •   Paul    15 年前

    因为您刚刚开始使用Git,所以重新开始并只向主分支提交“完整”代码会更容易。然后从主功能签出新的分支,并在其自己的分支上提交“未完成”的功能代码。对每个要素分支重复此操作。

    您必须将代码划分为多个功能并“完成”,因此使用这些功能来设置存储库。