Git分支详细信息

Git分支详细信息,git,Git,您能告诉我如何确定Git分支的以下细节吗 谁创建了分行 创建分支时 新分支是在哪个分支上创建的 你对分支机构的想法太过信任了。Git不关心分支;Git关心提交。但是为了说这一点,我们必须首先停止并定义分支这个词。在本段中,我所说的“分支”是一个分支名称,如master或develope或feature/tall。对于Git来说,这些名称只有一个功能:记录提交的原始散列ID Git还有其他实体,人们可以并且确实称之为“分支”。看 在任何情况下,Git中的分支名称都包含一次提交的哈希ID。这实际上

您能告诉我如何确定Git分支的以下细节吗

  • 谁创建了分行
  • 创建分支时
  • 新分支是在哪个分支上创建的

    • 你对分支机构的想法太过信任了。Git不关心分支;Git关心提交。但是为了说这一点,我们必须首先停止并定义分支这个词。在本段中,我所说的“分支”是一个分支名称,如
      master
      develope
      feature/tall
      。对于Git来说,这些名称只有一个功能:记录提交的原始散列ID

      Git还有其他实体,人们可以并且确实称之为“分支”。看

      在任何情况下,Git中的分支名称都包含一次提交的哈希ID。这实际上非常有用:对我们人类来说,Git哈希ID看起来像是随机垃圾,对Git本身来说也是如此。但这就是他们自己所拥有的一切。重要信息都存储在其他地方,主要存储在提交本身中

      Git非常关心提交。提交存储您要查找的大部分数据:谁创建了这些数据、时间以及其他早期提交的数据

      分支名称不存储您要查找的任何数据。他们没有创建者信息。他们也没有自己的历史(但我们稍后会看到更多)。这其中有一个重要原因

      与ClearCase不同,Git是一个分布式版本控制系统。在ClearCase中,有一个中央托管存储位置:卷对象库或VOB。个人用户去中央存储,从中获取东西,然后将东西放回中央存储。要做到这一点,这些用户必须共享VOB的名称。所以,如果美国之音想把某件事叫做布鲁斯,那么,其他人也可以把它叫做布鲁斯

      使用Git,每个存储库都是独立的。每个人都有自己的分支名称,独立于其他人的分支名称。Git中唯一真正通用的名称是哈希ID。每个人都同意哈希ID:在每个Git存储库中,哈希ID为
      08da6496b61341ec45eac36afcc8f94242763468
      的提交是
      08da6496b61341ec45eac36afcc8f94242763468
      。其他提交不能具有ID
      08da6496b61341ec45eac36afcc8f94242763468

      如果您和我计划将我们的存储库连接在一起,我们可能希望时不时地协调我们的分支名称,我们可以做到这一点。但是我的存储库有我的分支名称,而你的有你的。您是所有分支名称的创建者。我实际上无法在您的存储库中创建分支名称。我所能做的就是通过它丑陋的散列ID向您提交一个提交,然后让您的Git创建或更新一些名称。1

      更常见的是以另一种方式进行设置:我为您提供对我的存储库的只读访问。您可以运行
      git fetch
      让您的git通过Internet调用我的git。你的Git问我的Git:嘿,其他Git,你有什么分支名称?与这些分支名称一起使用的通用共享哈希ID是什么?My Git为您提供了我的姓名和哈希ID列表,您的Git从此开始工作:

      • Torek的Git说他的
        大师是
        a123456…
        。我有
        a123456…
        ,所以我很好
      • Torek的Git说他的
        dev
        b789abc…
        。嗯,我没有
        b789abc…
        。也许我应该通过它的散列ID请求提交
      这会一直持续下去,直到您的Git拥有我的Git在这一通信阶段交出的所有信息。然后,Git通过哈希ID请求它想要的任何提交。如果该提交的父提交另一个散列ID(存储在实际提交中)表示Git没有的提交,那么Git可以通过其散列ID请求提交,依此类推

      最终,你的Git会返回到你的Git已经拥有的一些散列ID,在这种情况下,你的Git拥有提交,并且根本不需要它,否则我会用完提交并说“就这些”。2然后,你的Git会在你的Git存储库中创建我交给你的每个提交

      在此过程中,Git所做的最后一件事是创建或更新远程跟踪名称。在这里,不要使用你的分支名称,它们是你的,不是我的-你的Git以一种简单易用的方式更改了我所有的名字。你的Git使用我的Git的昵称,而不是URL。您的Git的昵称可能是
      origin
      ——尽管您可以而且事实上必须为您要调用的每一个Git设置一个不同的昵称。名称
      origin
      只是您从中进行初始克隆的Git的默认名称

      因此,让我们假设您让Git调用my Git
      origin
      。您的Git有一个完整的my所有分支及其相应(单个)散列ID的列表。因此,您的Git现在创建或更新了一个
      origin/*
      名称,对应于我的Git的名称。我的Git告诉你的Git我的
      主控
      a123456…
      ,所以你的Git创建或更新你的
      源/主控
      指向提交
      a123456…
      。你要么已经有了这个提交,所以我的不必把它发送给你,要么没有,只是要求它,我的Git发送了它。我的Git告诉你的Git我的<代码>开发
      是<代码>b789abc…;你的Git现在有这个提交;Git创建或更新您的
      origin/dev
      以指向
      b789abc…

      再说一次,这是关键。提交和散列ID是Git的通用货币。其他人的分支名称。。。好吧,这些是其他人要担心的。我们将复制它们,并将它们保存为远程跟踪名称,但它们不是分支名称。我的分支名称是我的;你的分行名称就是你的。无论某人使用什么Git,他们的分支名称都是他们的,而不是其他任何人的


      1你最好记录下是我做的更新-r