gpt4 book ai didi

git - 如何复制分支

转载 作者:太空狗 更新时间:2023-10-29 14:36:25 26 4
gpt4 key购买 nike

我有两个分支。 “大师”和“测试”。

                ___testing____  
/
------master--------

我想继续测试分支添加功能,但在此之前,我需要将测试分支 merge 到master。我想创建第三个名为“testing2”的分支,它与“testing”完全相同,但来自“master”分支而不是“testing”的分支。

                   _____testing___
/
---------master----------
\____testing2____

作为替代方案,我知道我可以将“测试”分支 merge 到“主”并创建两个新分支并以这种方式完成我的工作,

                _____testing_____        ____newtest___
/ \ /
---master-------------------------------------------------
\____continuetest_____

但是有没有办法简单地复制分支“测试”?

最佳答案

如果您使用过其他版本控制系统——尤其是 Mercurial,它确实很像 Git,但有一些关键差异,包括此处的这个差异——您可能希望提交能够记住它们是在哪个分支上进行的。

在 Mercurial 中,他们这样做。

在 Git 中,他们没有。

分支名称只不过是指向一个提交的标签

在 Git 中,将分支名称想象成一种黄色便签。注释上有分支的名称,但它只是松散地附加到提交本身:

<--o   <--branch

提交有自己的外向箭头,指向提交的父提交。这建立了一个向后的提交链。如果我们给每个提交一个字母名称并绘制箭头说明谁指向谁,我们得到:

A <- B <- C   <-- branch

这里 A 是有史以来第一次提交。它没有 parent ——它不可能有,所以它就是没有。 B 是第二个提交,它的父级是A,所以B 指向 A。 (从字面上看,B 内部有 A 的哈希 ID,作为 B 本身的一部分。)同样,C 指向 B。名称 branch 记住了提交 C 的丑陋的大哈希 ID,因此我们不必记住。

进行提交:

  1. Git 从您那里收集一条日志消息
  2. Git 写出 index(又名暂存区):无论您使用 git add 更新什么都是新的,其他一切都和以前一样。
  3. Git 写出一个新的提交。新提交的 parent 是当前提交(它的哈希 ID)。新提交的日志消息就是你写的;新提交的作者和提交者是你;为新提交保存的(源代码)是写出索引的结果。
  4. 这个新提交有一个新的、唯一的哈希 ID,不同于以往的所有其他提交。
  5. 这是分支的 secret :无论您现在在哪个分支上,Git 都会将新 ID 放入分支名称中。所以现在 branch 记住了我们刚刚创建的 new 提交 D:

    A <- B <- C <- D   <-- branch

    实际上,Git 将旧提交上的便利贴剥离并粘贴到新提交上。

如果您将多个名称附加到一个 提交,然后进行新的提交,Git 只会撕下一个 便签。因此,如果您创建一个指向 C 的新名称,然后创建新的提交 D,则只有 current 分支名称移动到 D,旧的留在C:

A--B--C     <-- newname
\
D <-- branch

你现在应该问 Git 如何知道哪个标签是当前分支!

答案是HEAD。这就是为什么,如果您使用 git log --decorate,您会看到如下内容:

commit e0688e9... (HEAD -> master, origin/master, origin/HEAD)

这告诉我 Git 认为当前分支是master,并且当前提交有三个名称 e0688e9 ...:masterorigin/masterorigin/HEAD

关于git - 如何复制分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com