Git仓库如何与开发和主分支一起工作?

26

我对Git还不熟悉,这让我感到很困惑。我想在Git上开始开发Web应用程序,但迄今为止,我一直在处理困扰我前进的问题。

我读了这篇博客关于Git成功分支模型的文章。我真的很想设置类似的东西。

它说,仓库有两个主要分支,称为masterdevelop。所以我继续创建了一个仓库。然而,令我惊讶的是,仓库本身就是默认的master分支。那么我应该如何创建一个develop分支呢?我应该在master分支的父级中创建它吗?这意味着develop分支在仓库外面。

我是否完全误解了这里的情况?我应该忽略我在master分支中创建了两个分支的事实吗?

2个回答

34

分支不是目录。它是一个与提交一起移动的提交标签,就像标记是留在特定提交上的提交标签一样。你不会有任何东西“在”master分支内部,相反,masterdevelop最初都会将同一提交标记为自己的。

创建develop分支如下:

git branch develop

为了澄清:假设您有初始提交 A。它将被标记为 master 分支。

git init

A [master]

如果你创建一个新的提交B,分支标签将会移动:

git commit -a

A -> B [master]
如果你接着切换到develop分支,B也会得到新的标签:
git branch develop

A -> B [master, develop]
如果你在develop分支上进行了提交,它会移动,但master不会移动。
git checkout develop
git commit -a

A -> B [master] -> C [develop]

如果你现在在master分支上提交,代码树将会分叉:

git checkout master
git commit -a

A -> B -> C [develop]
     +--> D [master]

同时,您的目录中只有当前提交的内容。切换分支会更改目录内容。


如果我在主分支上有新的更改,然后执行 git checkout develop,那么当我切换到该分支时,我的未提交更改会丢失吗?抱歉,我是一个 SVN 用户。 - Harrison
@Harrison:如果您有未提交的更改,您就不能执行 git checkout。在此之前,您应该执行 git resetgit commitgit stash - Amadan
我会查看一下,谢谢!我只是习惯于在我的工作副本中看到一个“branches”目录,并同时编辑分支和主干。 - Harrison

17

master分支是默认创建的,类似于其他版本控制系统中的“主干”。在nvie分支模型中,develop分支从master分支上创建,通常是从第一次提交开始。

develop分支是从master分支上创建的普通分支。

git branch develop命令可以创建develop分支。

在nvie分支模型中,所有的开发工作都在develop分支上完成,并且只有在代码准备好发布时才合并到master分支并进行标记。许多人使用的典型工作流程是将所有的开发提交到master分支上,并在代码准备好发布时打标签。


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