git中存储库和分支有什么区别?

时间:2016-12-30 15:17:14

标签: git

精通git的人可以帮助我理解回购和分支之间的区别。我最近被介绍给git并且有点难以理解它们。有人告诉我克隆一个远程仓库(例如foo)到我的本地盒子。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器(例如bitbucket)。在第二组眼睛审查分支并说好。然后它被合并到开发或主分支。

然后在这张照片中,存储库扮演什么角色?对我来说,我跑的所有操作都是反对分支...

3 个答案:

答案 0 :(得分:15)

存储库是您在计算机上克隆的整个项目(目录和文件)。 分支是您的存储库的一个版本,换句话说,是一个独立的开发线。

存储库可以包含多个分支,这意味着存储库有多个版本。毕竟版本化代码的目的是,您可以同时处理项目的多个方面 - 每个方面都在不同的分支中进行。 Git使用表达式"工作树" (代表你的工作台)和#34;分支"。

相关:如果您想了解有关local and remote branches的更多信息。

关于在初始问题中处理分支的方式:

  

将远程仓库(例如foo)克隆到我的本地方框。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器

使用git这是一个很好的干净方式。我建议你总是这样做:

----A---B---C--     (REMOTE, master)

            |
            |       (Pull to local : `git pull origin master`)
            v

----A---B---C--     (LOCAL, master)

然后从您当地的主人(git checkout -b branch1)创建一个分支,处理它,提交您的更改并推送到远程:

----A---B---C------     (REMOTE, master)

----A---B---C---D--     (REMOTE, branch1)

               ^
               |
               |        (Push to remote : `git push origin branch1`)

----A---B---C------     (LOCAL, master)
             \
              D----     (LOCAL, branch1)

然后,当您对功能/修复/其他内容感到满意时,可以将branch1合并到master

答案 1 :(得分:4)

在Git中,存储库引用您的整个项目。在单个Git存储库中,您至少有一个branch。您可以使用git branch newFeature在存储库中创建新分支,以跟踪对与特定新功能相关的代码库更改的更改。

无论何时克隆存储库,您都要在本地计算机上创建项目存储库的副本。此外,您还可以git pull其他开发人员推送到公共存储库的任何新更改(了解详情herehere)。

答案 2 :(得分:3)

存储库包含有关项目的所有信息,包括所有更改的历史记录。每个更改都以" commit"。

的形式输入到存储库中

为了显示分支和存储库之间的区别,我将描述您提到的过程,并指出分支和存储库的使用方式。这不是一个git教程,只是一个例子,所以我们可以讨论分支和repos。

通常存在一个远程存储库,用户可以从中获取副本,并且可以向其提交更改。没有直接在远程仓库中进行实际的开发工作。

用户通过克隆来获取远程存储库的第一个副本。这将在用户计算机上创建本地存储库。本地仓库是远程仓库的完整副本。

分支只是指向存储库中某个提交的指针。 在最简单的情况下,有一个名为" master"的默认分支,master指向最近的提交。 每个提交都由一个数字标识,该数字是当时回购的散列。例如,在这种情况下,master可能指向commit:

2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7

开发人员可以克隆远程仓库,并检出分支主仓。 然后创建并签出开发分支(例如featureX-dev)。

git checkout -b featureX-Dev

此时,两个分支(master和featureX-Dev)都指向同一个提交。 对文件进行更改。 将更改提交到分支featureX-dev的本地副本。 现在,在本地存储库中,分支featureX-Dev指向比master更新的提交。 将分支featueX-dev推送到远程仓库,以便进行检查。

git push -u origin featureX-dev

第一次将分支推送到遥控器时使用-u告诉git你要跟踪这个分支。

其他开发人员(已经克隆了远程仓库)可以通过执行拉动从远程存储库获取分支功能X-dev。

在他们审核并告诉您它没问题之后,您可以将分支功能X-dev与您本地仓库中的主副本合并,然后推送主。

但是等等!如果其他开发人员已经将他们的更改推送到远程主服务器怎么办?

您在本地仓库中结帐主人

git checkout master

然后从远程拉

git pull origin master

您拥有其他人所做的新更改,并且主控指向上次提交。 现在,您可以将dev分支合并到主

的本地副本中
git merge featureX-dev

如果没有人改变主人,那么就没有伤害。合并只会将您的提交添加到主分支。 解决冲突(如果有),然后将主机推回远程。