Git branch 分支

Git的分支仅仅是指向快照的一个指针。当新增一个功能或者修改一个BUG时——无论工作量大小——都可以派生一个分支来包含这些改变。这既阻止了不稳定的代码合入主代码分支,也提供了一个在合并进主分支之前清理提交历史记录的机会。

上图所示是一个仓库中主分支之外有两个独立的开发分支,一个是一次小的功能开发,另一个则是包含大功能的长期开发分支。当时用独立分支进行开发时,不仅能让两个独立功能并行开发,并同时保证了主分支内不含有这两个独立分支中未开发完成的问题代码。

相对于其他版本控制工具,Git对于分支的实现轻量很多。其他工具对待分支时,是将文件从这个目录拷贝到那个目录。与此不同,Git对分支信息的保存是通过对commit的引用。具体地说,一个分支仅表示一个一系列commits的顶部commit引用——并不是一堆commits的容器。使用对这个commit的引用,可以通过commits之间的先后关系来确定一个分支的所有内容。

它是如何工作的

一个分支代表一个独立的开发工作。分支的概念其实是对编辑、暂存、提交这一整个流程的抽象。你可以将其想象为是在请求一整块全新工作区、暂存区,以及项目历史。新的commit记录仅会保存在当前分支的提交历史中,也就会在整个项目的历史记录中产生一个分叉。

git branch命令允许对分支进行创建、列举、重命名以及删除的操作。它不能进行切换分支或者将分叉的commit记录扔到其他分支里。因此git branch总是与git checkout以及git merge命令共同出现在使用场景中。

常见选项

列举仓库中的所有分支。git branch

此命令与git branch --list是同义词。

创建一个名为 <branch>的分支。git branch <branch>

但此命令并不会自动检出新创建的分支。

删除指定分支。git branch -d <branch>

这是一个安全的操作,因为当分支中含有未合并的变更时,Git会阻止这一次删除操作。

强制删除指定分支,即便其中含有未合并的变更。git branch -D <branch>

该命令常见于当开发者希望永久删除某一开发过程中的所有commit。

对于当前分支重命名为<branch>。git branch -m <branch>

列举所有远程分支:git branch -a

创建分支

对于所有分支仅是对于commit的指针这一概念的深刻理解是非常重要的。当你创建一个分支时,Git所需要做的无非是创建一个新的指针,这一过程并不会对仓库进行任何修改。比如当你对如下图所示的仓库进行创建分支的操作:

然后执行下面的命令来创建一个分支:

git branch crazy-experiment

此时的仓库提交历史没有任何变化。你得到的仅仅是指向当前commit的一个新指针。

要注意此时你只是创建了这个分支。如需开始对新分支进行提交,要先选择这个新的分支,使用git checkout命令,然后再使用标准流程git add 、git commit等命令。

创建远程分支

截至目前,我们所展示的操作都只关于本地分支。git branch命令也可以用于远程分支。为了操作远程分支,让我们先为仓库添加一个远程仓库。

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo

先添加了名为new-remote-repo的远程仓库,然后将本地分支crazy-experiment推向远程。

删除分支

一旦完成了当前分支的开发内容,并将其合并到主分支之后,就可以放心的删除该分支,而不用担心会丢失任何提交历史:

git branch -d crazy-experiment

然而,如果分支没有被合并过,以上命令则会输出下面这样的错误信息:

error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

它在向你抗议:如此操作将会丢失当前分支上的所有工作内容。如果你确定要删除该分支(比如当前分支的开发内容是一次失败的试验),你可以使用大写D的标记:

git branch -D crazy-experiment

这样删除操作后,无论什么状况都不会再出现任何警告信息,因此请谨慎使用。

上面的命令会删除该分支在本地仓库的拷贝。但远程仓库中仍然有这个分支的内容。如需删除远程仓库上的这个分支,请使用以下命令

git push origin --delete crazy-experiment

或者

git push origin :crazy-experiment

这会将删除信号推送给远程仓库,触发远程仓库删除crazy-experiment分支。

总结

理解Git的分支行为和git branch命令。git branch命令主要用于创建、列举、重命名以及删除分支。为了对产生的分支进行操作,git branch命令与其他命令一起使用,比如git checkout命令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值