2011-06-02 134 views
23

我是Git的新手,这真是令人困惑。我想开始在Git上开发一个Web应用程序,到目前为止,我一直在处理那些让我落后的麻烦。Git仓库如何与开发和主分支协同工作?

我读过this blog岗位上的Git成功的分支模型。我非常有兴趣设置类似的东西。

它说,该仓库有2个主要分支叫masterdevelop。所以我继续创建一个存储库。然而,令我惊讶的是,存储库本身是默认的master分支。我应该如何创建一个develop分支?我是否在master分支的父级中创建它?这意味着develop分支位于存储库之外。

我在这里得到了什么错误吗?我是否忽略了我在主分支内创建两个分支的事实?

回答

26

分支不是目录。它是一个随提交一起移动的提交标签,例如,标签是一个提交标签,它保留在特定的提交中。 “master”分支中不会有任何“内部”任何内容,而masterdevelop都将最初标记相同的提交。

创建开发分支,像这样:

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] 

同时,你只需要在你的目录不论您目前的内容提交的。切换分支,并且目录内容改变。

+0

如果我的主人有新的变化,然后'git checkout develop',那么当我切换到分支时,我的未提交的更改会丢失?对不起,我是svn用户。 – Harrison 2013-07-12 03:21:53

+0

@哈里森:如果你有没有提交的更改,你不应该'git checkout'。你应该'git reset','git commit'或'git stash'。 – Amadan 2013-07-12 04:02:27

+0

我会看看,谢谢!我习惯在WC中看到一个'branches'目录并同时编辑分支和主干。 – Harrison 2013-07-12 14:43:34

13

master分支默认情况下创建;您可以将其视为其他VCS系统中的“中继”。在nvie分支模型中使用的develop分支从master分支,推测来自第一次提交。

develop分支是一个正常的分支出来的master

git branch develop创建develop分支。

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