分支和提交有什么区别?

3

我从GitHub的基础开始学习,因为我要作为程序员工作,其他人告诉我在NetBeans中创建/克隆目录并提交/分支项目;但我不完全理解提交和分支之间的区别。就像你在这里看到的:

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

默认情况下,您的存储库有一个名为master的分支,被认为是权威分支。我们使用分支进行实验和编辑,然后再将它们提交到主分支之前。当您从主分支创建分支时,您正在创建一个副本或快照,以该时间点的主分支为准。如果其他人在您处理分支时对主分支进行更改,则可以拉取这些更新。我可以使用分支来进行代码实验或更改,以查看结果,然后再将项目合并到主分支中。如果其他人在您处理分支时对主分支进行更改,则可以拉取这些更新。
我无法阅读关于Git的书籍,因为我没有时间,但我在Git(GitHub)方面遇到了一些问题。
我的老师在工作中向我解释过,在提交之前必须进行分支操作。

实际上,分支的本质是什么,一个分支是否可以存在而没有提交或反之亦然,这些都涉及到一些相当深刻的哲学问题。但是,既然你没有时间读一本书,我就不会给你推荐书了。 - torek
在开始尝试与远程存储库交互(拉取,获取等操作)之前,请先在一个单独的本地存储库中弄清楚事情是如何工作的。 - user2141130
Pro Git是一个非常好的资源,可以免费在线获取。你不需要阅读全部内容,可以根据需要选择有用的部分。你会发现前三章包含了90%的所需内容。 - Code-Apprentice
5个回答

4
在Git中,“分支”可以被视为指向某个提交的指针。通常情况下,人们也会使用“分支”这个术语来指代由所指向的提交和其所有祖先组成的提交集合(有时这种双重含义会导致混淆)。
“提交”是代码的一个保存版本。提交按树形结构排列,每个提交(除第一个外)都具有一个或多个祖先提交。
严格来说,“分支”只是添加一个新的指针并将其指向某个提交。 “分支”不会以任何方式改变提交树(它不会添加提交)。然而,人们经常使用这个术语来指代分支和提交。
“提交”将一个节点添加到提交树中。当您执行基本提交时,Git还会重新指向您当前正在使用的分支以指向新的提交。
如果有人告诉你要“分支”,他们是在告诉你:
1. 创建一个新的分支,该分支指向您的更改所依据的提交。 2. 检出您的新分支(通常使用与上一步相同的命令完成)。 3. 在新检出的分支上提交您的更改。
例如,要从主分支创建分支,请执行以下操作:
git checkout master

(code... code... code...)

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

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

你还询问了这个陈述:

"如果有人在你处理分支时更改了主分支,你可以拉取这些更新。"

假设你刚刚按照上面的示例操作,并且在某人将单个提交添加到主分支后,你 fetch 了主分支。那么你将在该分支中看到一个分叉。一个末端是 new_branch,另一个末端是 master。然后您可以使用 merge 将两个分支合并(即创建一个新提交,由两个分支指向,以关闭分叉)。或者,您可以使用 pull,该操作可以一次性完成相同的操作。


2

提交(commit)就像是日记条目;分支(branch)就像有第二本日记。

提交标记了一个时间点、状态或记录。在项目的生命周期中,你会做很多次提交。分支就像是一本副本日记,在合并到主要日记(master)之前,你可以在上面写下你的初稿。


1

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

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

重要的是要理解,在分布式版本控制系统(DVCS)上,当人们在不同的存储库上工作时(即使他们正在使用相同名称的分支),他们总是在不同的分支上工作。


1
Git的一个想法是拥有一个稳定版本(分支),例如,您可以向客户展示该版本,另一个版本则用于尝试新功能、应用测试等。当您要为应用程序实现新功能时,通常会创建一个新分支来处理该功能/一组功能。然后,您会努力工作,使其发光发亮。之后,您将其合并到主分支(主要)分支中,以向客户展示它。

enter image description here

在这张图片上,每个红点都是一个提交(更改)到代码库的记录,在开发过程中逐个制作以更新应用程序。
而每个新的线条级别代表一个分支,顶部是主分支,而下面两个则是为新功能创建的。
您可以一次制作一个提交(这也可以在主分支中完成),只要代码发生更改。最后,在完成新功能的工作后,您将合并到主分支(这也显示在图片上-请查看主分支的第五个点)。
简单来说,你对应用程序所做的每一次修改都被称为“提交(commit)”。如果你使用桌面UI Git客户端,比如GitKraken, Tower, GitHub DeskTop等(更多列表见https://git-scm.com/downloads/guis),通常会将提交(commit)保存到本地仓库中,然后在本地提交(commit)完成后,你需要将所有更改推送(push)到远程仓库(可能有很多本地提交(commit))。

-2

我理解以下内容:

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

每个人都不是一个分支。分支的数量几乎与人数没有关系。更接近事实的是,除了“起源”存储库之外,每个人都有一个克隆,并且每个克隆可以拥有“起源”中分支的副本以及零个或多个本地分支。但即使如此,这也掩盖了很多细节。 - Mark Adelsberger
不要将仓库管理器的策略与Git的能力混淆。 仓库管理员可能会有一个政策,即每个团队成员只有一个分支,但一般情况下这并不是正确的。此外,您可以在本地存储库上创建任意数量的分支 - 只需不要将它们推送到服务器上即可。 - user2141130

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接