【问题标题】:What's the difference between branching and committing?分支和提交有什么区别?
【发布时间】:2017-10-04 10:41:16
【问题描述】:

我从 GitHub 的基础知识开始,因为我必须以程序员的身份工作,并且其他人告诉我有关在 NetBeans 中创建/克隆目录以及提交/分支项目;但我并不完全理解提交和分支之间的区别。就像你可以在这里看到的:

https://guides.github.com/activities/hello-world/

默认情况下,您的存储库有一个名为 master 的分支,它被认为是最终分支。在将它们提交给 master 之前,我们使用分支进行试验和编辑。

当你从 master 分支创建一个分支时,你正在制作 master 的副本或快照,就像它在那个时间点一样。如果在您处理分支时其他人对主分支进行了更改,您可以拉入这些更新。

我知道我有一个名为 master 的分支,这是我可以在 NetBeans 中单击我的 NetBeans 项目中创建的最终分支和其他分支。我知道如何在 NetBeans 中执行此操作,但我不明白分支和提交之间的区别。

在将我的项目与 master 合并之前,我可以使用分支对我的代码进行一些实验或更改以查看结果。也许我正在对我的代码进行一些更改,但我无法得到我想要得到的东西,这是在进行分支时进行一些测试以查看结果的最佳时机。

我无法理解:

“如果其他人在您处理分支时对 master 分支进行了更改,您可以提取这些更新。”

我无法阅读有关 Git 的书,因为我没有时间去做,但是我在使用 Git (GitHub) 时遇到了一些问题。

我的老师在工作中向我解释了你必须在提交之前进行分支。

【问题讨论】:

  • 实际上存在一些相当深刻的哲学问题,确切地说,分支,以及分支是否可以在没有提交的情况下存在和/或反之亦然。不过,既然你没时间看书,我就不指给你看书了。
  • 在您开始尝试了解如何与远程存储库交互(拉取、获取等)之前,先了解事物在单个本地存储库中的工作方式。
  • Pro Git 是一个非常好的资源,可以在线免费获得。您不需要阅读整篇文章。在任何特定时刻挑选有用的东西。你会发现前 3 章包含了你需要的 90%。

标签: git github netbeans version-control


【解决方案1】:

在 Git 中,“分支”可以被认为是指向提交的指针。通常,人们还会使用术语“分支”来指代由所指向的提交及其所有祖先组成的提交集(有时这种双重含义会导致混淆)。

“提交”是代码的保存版本。提交被安排在一个树中,其中每个提交(第一个除外)都有一个或多个祖先提交。

严格来说,“分支”只是添加一个新指针并将其指向某个提交。 “分支”不会以任何方式更改提交树(它确实添加提交)。但是,人们经常使用这个术语来表示分支和提交。

“提交”向提交树添加一个节点。当您执行基本提交时,Git 还会重新指向您当前使用的分支以指向新提交。

如果有人告诉你“分支”,他们就是在告诉你

  1. 创建一个新分支,指向您的更改所基于的提交
  2. 签出您的新分支(这通常使用与上一步相同的命令完成)
  3. 提交您的更改(仍在您刚刚签出的新分支上)

例如,要从 master 分支,请执行以下操作:

git checkout master

(代码...代码...代码...)

git checkout -b new_branch
git commit -am'commit message for new branch'

现在new_branch 指向一个新提交,其祖先是master 指向的提交。

你也问过这个说法:

“如果其他人在您处理分支时对主分支进行了更改,您可以提取这些更新。”

假设您刚刚按照上面的示例进行操作,然后在有人对 master 分支进行了一次提交之后,您 fetch master。现在你在分支中有一个叉子。一个提示是new_branch,另一个提示是master。然后,您可以merge 两个分支(即进行两个分支指向的新提交,关闭分支)。或者,您可以使用 pull,它执行相同的操作,但只需一步。

【讨论】:

    【解决方案2】:

    提交就像日记条目;一个分支就像有第二本日记。

    提交标志着一个时间点、一个状态、一个记录。您在项目的整个生命周期中进行了大量的提交。分支就像一本重复的日记,您可以在其中编写初稿,然后将它们全部合并回您的主日记 (master)。

    【讨论】:

      【解决方案3】:

      嗯...提交意味着“创建修订”,通常在分支上(但这在 Git 中不是强制性的)。分支(在 Git 中)只是指向修订的指针。

      当人们谈论“分支”时,他们的意思是创建分支,然后合并/变基/不管它们以混合来自不同人/分支的代码。

      重要的是要了解,在 distributed version control system (DVCS) 上,当人们在不同的存储库上工作时,您总是不同 分支上工作(即使他们正在一个具有相同名称的分支)。

      【讨论】:

        【解决方案4】:

        Git 的一个想法是拥有一个稳定版本(branch),例如,您可以向您的客户展示另一个版本,您可以在其中试验新功能、应用测试等.

        当您要为您的应用程序实现一项新功能时,您通常会为该功能/一组功能创建一个新分支。然后你努力工作,让它发光。之后,您将其合并ma​​ster(主)branch 以将其展示给您的客户。

        在这张图片上,每一个红点都是对存储库的提交(更改),您在开发过程中一一进行以更新您的应用程序。

        虽然图片上的每个新行级别都是分支,但顶部是,而较低的两个是新功能

        只要代码发生更改,您就可以一一进行提交(这在主分支中也是可能的)。最后,在你完成一个新功能的工作后,你合并到主分支(这也显示在图片上 - 查看主分支的第五点 )。

        简单来说,您对应用程序应用的每一项更改都称为提交。如果您使用桌面 UI Git 客户端,例如 GitKraken、Tower、GitHub DeskTop 等(更大的列表在 https://git-scm.com/downloads/guis),您通常会提交到本地存储库,然后在commit到本地仓库之后,你push所有的更改到远程仓库(可能有一堆本地提交)。

        【讨论】:

          【解决方案5】:

          我了解以下内容:

          1. 每个人都是一个分支。如果是三个人,就会有三个分支。
          2. 一个人创建了一个与他/她的存储库关联的分支,然后他/她在他/她自己的分支上工作,对他/她的代码进行更改。但是你必须做一个承诺吗?我的老师向我解释说,在做了一些更改并在分支上工作之后,您必须在NetBeans 中进行提交(存在这种可能性)。

          【讨论】:

          • 每个人都不是一个分支。分支机构的数量与人数几乎没有关系。更接近真实的是,通常,除了“源”存储库之外,每个人都有一个克隆,并且每个克隆都可以拥有“源”中分支的副本以及零个或多个本地分支。但即使这样也掩盖了很多。
          • 不要将存储库管理器的策略与 git 的功能混淆。存储库管理员可能有一个策略,即每个团队成员都有一个且只有一个分支,但通常情况并非如此。此外,您可以根据需要在本地存储库上创建任意数量的分支——只是不要推送它们。 stackoverflow.com/questions/43813582/…
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-18
          • 2015-10-21
          • 2016-05-02
          • 1970-01-01
          • 2013-07-09
          • 1970-01-01
          • 2023-03-09
          相关资源
          最近更新 更多