Git分支

分支

分支是什么
  1. Git的分支其实就是一个指针,它指向的是某个提交对象。
  2. Git在提交时就会保存一个提交对象。
  3. 提交对象包含一个指向暂存内容快照的指针,作者姓名邮箱,提交说明,指向父对象的指针。

之前说过,Git以类似文件系统的方式管理文件,保存一系列不同时刻的文件快照。
执行暂存操作时,Git会计算相应文件的校验和,把当前版本的文件快照保存到Git仓库(使用blob对象保存),把校验和加入暂存区。
执行提交操作时,Git会计算每一个子目录的校验和,在Git仓库中将这些校验和保存为树对象。Git随后创建一个提交对象,提交对象除了指向暂存内容快照的指针、作者信息、提交说明、父对象指针外,还包含指向树对象的指针。那么Git就记录了此次提交的全部信息。
首次提交后,Git仓库有三类对象:

  1. blob对象:保存文件快照
  2. 树对象:保存目录结构,blob对象索引
  3. 提交对象:指向树对象的指针,提交信息
    在这里插入图片描述
    后续提交后,新的提交对象会包含指向上次提交对象(即父对象)的指针:
    在这里插入图片描述
    分支——本质上仅仅是指向提交对象的可变指针。切换不同的分支,其实就是切换不同的提交对象,重现该提交对象的快照。
    git init初始化一个项目时,默认创建了一个*master*分支,master分支与其他分支没有任何区别。每次提交,master就向前移动。
创建分支——git branch

创建分支其实就是创建一个新的可变指针,指向了当前的提交对象。
除了默认的master分支,Git还有一个HEAD指针,指向当前所在的本地分支

$ git branch testing 仅创建分支
$ git log --oneline --decorate
f30ab (HEAD -> master, testing) blabla
34ac2 blabla
98ca9 blabla

在这里插入图片描述
此时,当前所在的本地分支是master分支,master分支指向的提交对象是f30abtesting分支是基于当前的提交对象f30ab创建的,所以testing也指向了提交对象f30ab。由于只创建而没有切换到testing分支,所以HEAD仍指向了master分支。

切换分支——git checkout
$ git checkout testing 切换到已存在的分支testing
$ git checkout -b testing 创建并切换到新分支testing

切换之后,分支指向如图:
在这里插入图片描述
如图,mastertesting仍指向提交对象30ab,但是HEAD指向了testing,即当前分支已经被切换到了testing
如果此时进行提交,创建了一个提交对象87ab2,那么HEADtesting都会向前移动,指向新的提交对象87ab2,而master仍然指向f30ab(没有基于master分支提交),结果如图:
在这里插入图片描述
如果此时再切换回master分支:git checkout master,会把HEAD指回master,同时把工作区的内容恢复成master指向的快照,即提交对象f30ab的内容:
在这里插入图片描述
此时,工作区已经处于master分支,工作区是f30ab的快照内容。
此时再次提交,创建提交对象c2b9e,它的父对象就是f30abmasterHEAD向前移动。之前在testing分支的提交对象87ab2的父对象也是f30ab,项目从f30ab起,开始分叉:
在这里插入图片描述

$ git log --oneline --decorate --graph --all  输出提交历史、各个分支指向、项目的分支分叉 
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project
校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
<think>好的,我现在需要处理用户关于Git分支管理的查询。首先,用户提到了几个引用内容,我需要仔细看一下这些引用来确保回答准确。 首先,引用[1]提到master分支并不是特殊分支,只是因为git init默认创建,很多人懒得改。这说明在回答时需要强调master分支的普通性,可能还要提到如何修改默认分支名称。 引用[2]讨论了删除分支的情况,特别是使用git branch -D强制删除。这里需要注意区分-D和-d的区别,用户可能在这里有疑问,比如什么时候需要强制删除。 引用[3]展示了用git log带参数查看分支合并历史,比如--graph和--abbrev-commit。这部分应该在教程中介绍如何可视化分支结构,帮助用户理解合并情况。 接下来,用户需要Git分支管理教程,所以需要结构清晰,分步骤讲解。根据系统指令,要使用中文,正确使用LaTeX格式的数学表达式,不过这里可能用不上数学公式,但需要注意行内代码用$...$吗?不过根据示例,代码块是用```包裹的,可能数学表达式才用$,代码部分不需要。但用户的问题是关于Git的,可能涉及命令示例,需要正确展示代码块。 系统级指令要求生成相关问题,所以最后需要列出相关问题。回答中引用的部分要添加引用标识,例如在提到默认分支时加上[^1],删除分支时引用[^2],查看合并历史引用[^3]。 现在开始组织教程的结构: 1. 分支创建与切换:使用git branch和git checkout或git switch,引用相关命令。 2. 分支合并:merge和rebase的区别,如何解决冲突。 3. 分支删除:git branch -d和-D的区别,引用[2]的例子。 4. 查看分支历史:git log参数,如--graph,引用[3]。 5. 远程分支管理:推送、拉取、跟踪远程分支。 6. 默认分支设置:提到引用[1],说明master的普通性及如何修改默认分支。 需要确保每个部分都简明,命令示例正确,并适当加入引用标注。最后生成相关问题,比如分支合并策略、解决冲突的方法、重命名默认分支等。 现在检查是否有遗漏,比如分支管理的最佳实践、rebase的风险,或者如何查看远程分支状态。可能需要简要提及,但保持教程基础,不过于深入。 确认引用正确,每个引用只出现在相关部分末尾,自然地添加标识。例如,在讨论默认分支时引用[^1],删除分支引用,查看历史引用。 最后,确保使用中文,代码块用正确语法,例如: ```bash git branch new-feature ``` 这样用户能清楚看到命令格式。避免使用任何Markdown格式错误,比如正确使用三个反引号和语言标识。同时,生成的相关问题要围绕分支管理的常见疑问,比如创建、合并、删除、冲突解决等。</think>### Git 分支管理教程 #### 1. 分支创建与切换 - **创建分支**:使用 `git branch <分支名>` 命令,例如: ```bash git branch new-feature ``` - **切换分支**:使用 `git checkout <分支名>` 或更直观的 `git switch <分支名>`: ```bash git switch new-feature ``` #### 2. 分支合并 - **合并分支**:通过 `git merge` 将目标分支合并到当前分支。例如,将 `new-feature` 合并到 `master`: ```bash git switch master git merge new-feature ``` 若合并时发生冲突,需手动解决后提交。 - **变基(Rebase)**:另一种整合分支的方式是 `git rebase`,它会将当前分支的提交“移植”到目标分支顶端,使历史更线性: ```bash git switch new-feature git rebase master ``` #### 3. 分支删除 - **安全删除**:若分支已合并到其他分支,可用 `git branch -d <分支名>` 删除: ```bash git branch -d new-feature ``` - **强制删除未合并分支**:若分支未合并但需删除,使用 `-D` 参数[^2]: ```bash git branch -D experimental ``` #### 4. 查看分支历史 使用 `git log` 参数可视化分支合并情况: ```bash git log --graph --pretty=oneline --abbrev-commit ``` 此命令会显示分支拓扑结构和简化的提交哈希值。 #### 5. 远程分支管理 - **推送分支到远程仓库**: ```bash git push origin new-feature ``` - **拉取远程分支**: ```bash git fetch origin git switch -c local-feature origin/new-feature ``` #### 6. 默认分支设置 Git 的默认分支(如 `master` 或 `main`)并无特殊性,仅因 `git init` 默认创建[^1]。可通过以下步骤修改默认分支: 1. 创建并切换到新分支: ```bash git switch -c main ``` 2. 推送并更新远程仓库: ```bash git push -u origin main git branch -d master ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值