百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

使用分支——Git branch 命令

wptr33 2025-02-15 01:26 19 浏览

本篇文章会对git branch命令进行一次深度审视,其内容还包含有关git分支模式的讨论。在很多现代版本控制系统内,分支都是一项必备功能。但在其他版本控制系统内,分支操作会相当昂贵,消耗时间精力和硬盘空间。在Git中,分支是每天开发过程中自然的一部分。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是同义词。

git branch 

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

git branch -d 

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

git branch -D 

强制删除指定分支,即便其中含有未合并的变更。该命令常见于当开发者希望永久删除某一开发过程中的所有commit。

git branch -m 

对于当前分支重命名为

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  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命令。

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China's top diplomat to chair third China-Pacific Island countries foreign ministers' meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...