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

项目的分支管理

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 europe
watkins@watkins:~/watkins/finance$ git checkout europe 
M	funciton1
Switched to branch 'europe'
watkins@watkins:~/watkins/finance$ 

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

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

然后提交这些代码。

watkins@watkins:~/watkins/finance$ git add funciton3
watkins@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 funciton3
watkins@watkins:~/watkins/finance$ git push origin europe 
To https://github.com/weixingstudio/finance.git
 * [new branch]      europe -> europe
watkins@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 -> europe
watkins@watkins:~/watkins/finance$ 

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


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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值