Git 原点如何可以同时是指针和分支?

Git 原点如何可以同时是指针和分支?,git,Git,我目前正在学习Git,在我看来,我发现很多关于Git起源的定义相互矛盾 基于我的教程,我目前对原点的理解是,每次从本地服务器获取文件时,原点“指针”会从那里下载到最新的提交,因此我认为它是一个指针。p> 问题是我也听说过起源被称为分支()。我的问题是,当指针“指向”单个提交和分支时,如何将其视为一个“指针”和分支,而分支指的是分支方向上的更改,允许您在当前分支之外进行更改,这是两件完全不同的事情 分支机构: master --> a \

我目前正在学习Git,在我看来,我发现很多关于Git起源的定义相互矛盾

基于我的教程,我目前对原点的理解是,每次从本地服务器获取文件时,原点“指针”会从那里下载到最新的提交,因此我认为它是一个指针。p> 问题是我也听说过起源被称为分支()。我的问题是,当指针“指向”单个提交和分支时,如何将其视为一个“指针”和分支,而分支指的是分支方向上的更改,允许您在当前分支之外进行更改,这是两件完全不同的事情

分支机构:

 master --> a
                \
                 \
          branch1 --> b
指针:

master --> a --> b --> c 
                       --> C is the HEAD "pointer" and capable of moving if point D created

git中没有所谓的“源”。标签“origin”只是默认情况下自动配置的“remote”的名称。git中也没有所谓的“指针”,尽管有“引用”

远程存储库是一个命名的git存储库,而不是您正在使用的存储库。它可能是同一台计算机上的另一个目录,也可能位于世界其他地方的计算机上。Git知道远程存储库中存在哪些分支(您可以在运行
Git branch-a
时看到这些分支,它同时显示本地和远程分支)。您将远程分支称为“remotename/branchname”,因此,如果您有一个名为
origin
的远程分支和一个名为master的分支,您可以通过运行以下命令来检查:

git checkout origin/master
如果你只是想跑步:

git checkout master
然后(假设它还不存在),git将创建一个名为
master
的本地分支,并将其配置为跟踪
origin/master
。“跟踪”意味着您键入
git pull
,git知道您要从远程存储库更新
origin/master
,然后将这些更改合并到本地分支。类似地,当您键入
gitpush
时,git知道您想要将更改发送到远程存储库的
master
分支

分支是指一系列更改的引用类型。在分支上进行新提交时,分支引用将前进到新提交。因此,如果您在分支
主节点上开始两次提交:

       master
      /
A -> B 
然后在该分支上进行新的提交,您将得到:

            master
           /
A -> B -> C
请注意,在这些示例中,分支名称指的是最近的提交

标记是另一种引用。与分支不同,标记只有在显式更新时才会更改。因此,如果在前面的示例中有一个标记
working\u version
指向提交B,那么即使在您进行了新的提交之后,它也会继续指向提交B


您可以在中找到上述内容的详细信息。

git中没有所谓的“源代码”。标签“origin”只是默认情况下自动配置的“remote”的名称。git中也没有所谓的“指针”,尽管有“引用”

远程存储库是一个命名的git存储库,而不是您正在使用的存储库。它可能是同一台计算机上的另一个目录,也可能位于世界其他地方的计算机上。Git知道远程存储库中存在哪些分支(您可以在运行
Git branch-a
时看到这些分支,它同时显示本地和远程分支)。您将远程分支称为“remotename/branchname”,因此,如果您有一个名为
origin
的远程分支和一个名为master的分支,您可以通过运行以下命令来检查:

git checkout origin/master
如果你只是想跑步:

git checkout master
然后(假设它还不存在),git将创建一个名为
master
的本地分支,并将其配置为跟踪
origin/master
。“跟踪”意味着您键入
git pull
,git知道您要从远程存储库更新
origin/master
,然后将这些更改合并到本地分支。类似地,当您键入
gitpush
时,git知道您想要将更改发送到远程存储库的
master
分支

分支是指一系列更改的引用类型。在分支上进行新提交时,分支引用将前进到新提交。因此,如果您在分支
主节点上开始两次提交:

       master
      /
A -> B 
然后在该分支上进行新的提交,您将得到:

            master
           /
A -> B -> C
请注意,在这些示例中,分支名称指的是最近的提交

标记是另一种引用。与分支不同,标记只有在显式更新时才会更改。因此,如果在前面的示例中有一个标记
working\u version
指向提交B,那么即使在您进行了新的提交之后,它也会继续指向提交B

您可以在中找到上述内容的详细信息。

当您创建存储库时,实际上是从某个地方复制它。“某处”就是git所谓的“起源”。因此,源代码是您从中获得它的源存储库

现在,克隆完成后,您的计算机上有一个存储库,它可能会独立于源服务器进行更改(因为您将提交给它)。此外,在将来的某个时候,您需要将存储库与源站重新同步(因为您将把工作发布回源站)

因此,需要将存储库中的分支与源中分支的当前状态合并。您的分支和源分支完全可能具有相同的名称(如master),因此Git需要一种方法来区分这些分支。同样,它选择了一种简单的方法——在分支名称前加上“origin/”前缀

因此,如果我们使用主分支的示例,“master”是存储库中主分支的状态,“origin/master”是源中主分支的状态

您需要知道的最后一件事是:每个提交都有对其父级的引用。因此,合并提交将有两个或多个