虚拟项目学习git/github原理与基本操作7

来源:互联网 发布:如何在淘宝卖充值卡 编辑:程序博客网 时间:2024/06/08 19:17

项目的分支管理

Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。


如果你没有指定当前的分支的名字,git会自动的使用master作为当前的分支的名字,并且有个指针指向当前的工作的分支,每次提交项目后会自动的更新master指针到最新的版本中。



每次提交,都会有一个对当前版本的所有文件的快照的指针,这个指针指向当前版本的文件快照,通过这个快照,可以找到对应版本的所有的文件。而且,每个指针都有个父指针,指向上一个软件版本。通过这个版本,很容易找个以前版本的快照指针。


那么,Git 又是如何创建一个新的分支的呢?答案很简单,创建一个新的分支指针。比如新建一个 testing 分支,可以使用 git branch 命令:

$ git branch testing

这会在当前 commit 对象上新建一个分支指针(见图 3-4)。



创建新的分支以后,并不会自动的转换到新的分支上进行工作,而是还是在原来的分支中进行开发,需要手动的转换需要开发的分支。

Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为 HEAD 的特别指针。请注意它和你熟知的许多其他版本控制系统(比如 Subversion 或 CVS)里的 HEAD 概念大不相同。在 Git 中,它是一个指向你正在工作中的本地分支的指针。运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,所以在这个例子中,我们依然还在 master 分支里工作


要切换到其他分支,可以执行 git checkout 命令。我们现在转换到新建的 testing 分支:

$ git checkout testing

这样 HEAD 就指向了 testing 分支


现在假设,在v0.1的基础版本上,我们的税收计算软件想要开辟欧洲市场,我们又需要充分的利用当前的软件开发的基础。所以我们从当前的v0.1的版本上拉出一个新的分支,开发用户在欧洲销售的财务软件。因为欧洲的财务软件的设置,税收比例,采用的税收算法,网络通信控制,用户界面等都不一样,所以需要拉出一个新的分支进行开发。

这里我们假设拉出的新的分支叫做europe.

watkins@watkins:~/watkins/finance$ git branch europewatkins@watkins:~/watkins/finance$ git checkout europe Mfunciton1Switched to branch 'europe'watkins@watkins:~/watkins/finance$ 

创建新的分支后还要手动的转换到新的分支去。

切换到europe分支中,新建名为function3的文件,并添加些专门用于给europe分支用代码。

然后提交这些代码。

watkins@watkins:~/watkins/finance$ git add funciton3watkins@watkins:~/watkins/finance$ git status # On branch europe# Changes to be committed:#   (use "git reset HEAD <file>..." to unstage)##new file:   funciton3#watkins@watkins:~/watkins/finance$ git commit[europe 318a182] add function3 1 file changed, 1 insertion(+) create mode 100644 funciton3watkins@watkins:~/watkins/finance$ git push origin europe To https://github.com/weixingstudio/finance.git * [new branch]      europe -> europewatkins@watkins:~/watkins/finance$ 

然后做些修改,修改我们之前建立的配置文件,配置地区和时区,进入europe分支的C5的快照。

watkins@watkins:~/watkins/finance/config$ vim configuration watkins@watkins:~/watkins/finance/config$ cd ..watkins@watkins:~/watkins/finance$ git status # On branch europe# Changes not staged for commit:#   (use "git add <file>..." to update what will be committed)#   (use "git checkout -- <file>..." to discard changes in working directory)##modified:   config/configuration#no changes added to commit (use "git add" and/or "git commit -a")watkins@watkins:~/watkins/finance$ git add config/watkins@watkins:~/watkins/finance$ git status # On branch europe# Changes to be committed:#   (use "git reset HEAD <file>..." to unstage)##modified:   config/configuration#watkins@watkins:~/watkins/finance$ git commit[europe d2c4e14] modified the location and timezone 1 file changed, 2 insertions(+), 2 deletions(-)watkins@watkins:~/watkins/finance$ git push origin europe To https://github.com/weixingstudio/finance.git   318a182..d2c4e14  europe -> europewatkins@watkins:~/watkins/finance$ 

然后,假设到目前为止,我们发现C5版本的代码写出了一些比较好的功能,我们想在我们的master分支中整合这些新的功能,就可以把master分支和europe分支合并起来,整合两个分支的代码。


然后看一下我们的分支的图:


原创粉丝点击