分支管理
“接下来我们学习git的‘必杀技技’分支管理。” E哥说。
“svn也有分支概念,我的上一个单位开发新版本时,先在分支上开发,再合并到主干,最后上进行上线。” 李靖又拿用过的版本管理工具和git做起了对比。
“ 不过有个小问题是版本多了的时候比较麻烦,要checkout多分代码到硬盘上用不同的目录保存,我刚去的时候,由于不熟悉经常弄错。“ 看来李靖深受被多版本切换之苦。
E哥说, “这也是git非常好用的一个原因。Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多是秒级的。“
创建分支
如何创建一个新的分支的呢?比如我们的项目遇到个bug,在bug跟踪系统里编号issue53, 我们新建一个名叫 iss53的分支来进行修复。使用 git branch 命令:
$ git branch iss53
运行git status命令,查看当前在哪个分支上工作。
$ git status
# On branch master
nothing to commit, working directory clean
这里的第二行”#on branch master”
,就是当前的分支。git保存着一个名为 HEAD 的特别指针,用来标识当前的分支。例如,我们执行完刚才的指令后,本地仓库的情况是这样的:
版本1和2是以前项目的历史版本。 我们当前的版本是版本3。
切换分支
为了修复bug,要切换到刚建立的iss53分支。可以执行 git checkout 命令:
$ git checkout iss53
Switched to branch iss53
$ git status
# On branch iss53
nothing to commit, working directory clean
这样 HEAD 就指向了 iss53 分支
这时我们在当前目录下新增加一个文件 newbranch.txt 来模拟修复了issue53这个bug,
vi newbranch.txt
输入”fixed issue55”
,保存退出。 执行:
$ git status
# On branch iss53
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbranch.txt
nothing added to commit but untracked files present (use "git add" to track)
我们看见在iss53分支下有一个新文件newbranch.txt , 它的状态是untracked,标明这个文件还没有登记到git版本管理中。
“这时如果我们切换切换回master分支,会发生什么呢?”李靖问道。
E哥没有回答,在键盘上敲击命令:
$ git checkout master
Switched to branch 'master'
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbranch.txt
nothing added to commit but untracked files present (use "git add" to track)
”在master分支下也有 newbranch.txt标志为untracked。“李靖自答到,”我记得你刚才说,untracked就是不在git版本管理范围内的文件。 “
”正确!”
“现在我们切换回iss53分支, 提交修改。”E哥说道。
$ git checkout iss53
$ git add newbranch.txt
$ git commit -m "add new file on test"
$ git status
# On branch iss53
nothing to commit, working directory clean
”已经没有untracked文件了,表示文件提交成功。 如果你用的windows,或者mac,我们打开资源浏览器,txt文件也在这里。”
”我们在切换到master分支,看看发生了什么。”
$ git checkout master
$ git status
# On branch master
nothing to commit, working directory clean
”咦?addbranch.txt文件消失了!“李靖说道。