你能说出自动生成的git分支吗?

你能说出自动生成的git分支吗?,git,Git,当两个人在同一个分支上工作并多次提交而不推送时,在最后推送他们的提交的人之前,他们必须先git pull--rebase或合并(git fetch/git merge)以获取存储库中的更改 当它们将更改合并在一起时,当使用例如gitk查看源代码树时,您会看到提交的内容看起来像一个不同的“分支”。git如何区分这些“自动生成的分支”和您通过签出它们而创建的分支?你能在创建合并分支后命名它们吗 编辑: 我所说的“自动生成分支”是指: 我所说的“命名分支”是指: 在我的理解中,一个分支,在视觉上,

当两个人在同一个分支上工作并多次提交而不推送时,在最后推送他们的提交的人之前,他们必须先
git pull--rebase
或合并(
git fetch
/
git merge
)以获取存储库中的更改

当它们将更改合并在一起时,当使用例如gitk查看源代码树时,您会看到提交的内容看起来像一个不同的“分支”。git如何区分这些“自动生成的分支”和您通过签出它们而创建的分支?你能在创建合并分支后命名它们吗

编辑:

我所说的“自动生成分支”是指:

我所说的“命名分支”是指:

在我的理解中,一个分支,在视觉上,是当历史图表分叉成两个。第一个图像中的代码库分支是由我在第一个问题中提到的场景创建的,第二个是由git checkout-b v2.0创建的,在git历史中没有任何东西是“自动生成的”,如gitk所示。每个点代表一个人创建的提交。两点之间的每一行表示提交之间的关系。如果一行从一个提交上升到另一个提交,则上提交是下提交的子级,下提交是上提交的父级

请注意,您可以创建指向所需任何提交的标记和分支。如果希望在特定提交时使用静态标记,只需使用
git-tag
创建一个标记即可

在我的理解中,一个分支,在视觉上,是当历史图表分叉成两个

分支只是指向提交的指针。签出一个分支,然后进行另一次提交时,该分支将移动到新的提交。这意味着在同一个提交中创建两个分支并提交两组不同的更改会导致出现您看到的分叉。这里有一个例子

假设您有一个提交历史记录

A-B <- branchA, branchB
现在,您的历史记录如下所示:

A-B  <- branchB
   \
    C <- branchA
A-B-D  <- branchB
   \
    C <- branchA
... <-o <-o <-o ...
现在的历史是这样的:

A-B  <- branchB
   \
    C <- branchA
A-B-D  <- branchB
   \
    C <- branchA
... <-o <-o <-o ...
A-B-D在gitk中说明的git历史记录中没有“自动生成”的内容。每个点代表一个人创建的提交。两点之间的每一行表示提交之间的关系。如果一行从一个提交上升到另一个提交,则上提交是下提交的子级,下提交是上提交的父级

请注意,您可以创建指向所需任何提交的标记和分支。如果希望在特定提交时使用静态标记,只需使用
git-tag
创建一个标记即可

在我的理解中,一个分支,在视觉上,是当历史图表分叉成两个

分支只是指向提交的指针。签出一个分支,然后进行另一次提交时,该分支将移动到新的提交。这意味着在同一个提交中创建两个分支并提交两组不同的更改会导致出现您看到的分叉。这里有一个例子

假设您有一个提交历史记录

A-B <- branchA, branchB
现在,您的历史记录如下所示:

A-B  <- branchB
   \
    C <- branchA
A-B-D  <- branchB
   \
    C <- branchA
... <-o <-o <-o ...
现在的历史是这样的:

A-B  <- branchB
   \
    C <- branchA
A-B-D  <- branchB
   \
    C <- branchA
... <-o <-o <-o ...
A-B-dtl;博士
您看到的branchy结构通常不使用许多单独的名称。为了避免这种情况,您应该重新设置基础,而不是合并。(实际上,这不是名称的问题,尽管Git的分支名称和远程跟踪名称之间存在着某种联系,而且标记名称也是如此,它们都是Git所称的引用的特定形式以及您在这里想要的内容。)

Git是关于提交的 要记住的第一件也是最重要的一件事是Git实际上就是关于提交的。提交是Git的。提交通过同时存储数据、源树的完整快照和元数据,一次完成多项任务。让我们来看一个实际的提交:

$ git cat-file -p HEAD | sed 's/@/ /'
tree 982dc557269a91826c64dd7e3c7d63c4ccfefc90
parent 8c8ddbd0821d552ff3c7e1b67c669dd7f11d63d7
author Junio C Hamano <gitster pobox.com> 1515188717 -0800
committer Junio C Hamano <gitster pobox.com> 1515188717 -0800

Git 2.16-rc1

Signed-off-by: Junio C Hamano <gitster pobox.com>
“较新”或“较新”的提交朝向右侧。通过存储父散列,每个子提交都指向其父提交。由于箭头总是指向后(向左),我们可以停止绘制它们,这很好,因为StackOverflow上没有那么多好的箭头字体可供使用。:-)

请注意,如果我们启动一个新链,其中一个子链指向较早的父链,则会出现分歧:

...--o--o--o--...
         \
          o--o--...
如果提交是合并提交,则它有两条弧,指向两个父级。正是这些合并提交重新加入了这些链:

...--o--o--o--o---M
         \       /
          o--o--o
最后一次提交,标记为
M
,是一次具有两个父级的合并提交

现在,一般来说,进行新的提交,特别是进行合并提交是分支和其他名称的用武之地。。。或者,有时候,不要

查找提交:我们需要名称,也就是引用 我们在上面提到散列ID(
36438dc…
)对人类没有用处;我们喜欢名字。所以我们有一个像
master
这样的名字来查找这个ID。Git也需要它们,至少在某些时候是这样。特别是,虽然Git可以搜索整个数据库并找到每个对象,但它有维护命令,如
Git-fsck
Git-gc
,这在大型存储库中非常缓慢。快速的操作是获取一个已知的散列ID并查找与该ID相关的数据

因此,一般来说,Git以
master
这样的名称开头,它可以找到类似
36438dc…
的提交。Git可以使用它的信息,特别是它的
行,有时还有它的
父行,向我们展示提交、签出或其他内容。或者我们可以让Git在历史上后退一次提交到
36438dc…
的父级,这当然是另一次提交。我们可以让Git提取提交,或者查看它的父级,等等

然而,无论我们做什么,都是名字让这个过程开始。这些名称标识了一个特定的提交,从中我们(或Git)可以向后工作

如何分支
             @   <-- master
            /
...--o--o--*--●   <-- origin/master
             @--M   <-- master
            /  /
...--o--o--*--●   <-- origin/master
             @
            /
...--o--o--*--●   <-- origin/master
               \
                ○   <-- master