git分支

  1. 分支简介
  • 提交对象:Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。在进行提交操作时,Git会保存一个提交对象(commit object)该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。
  • 暂存操作: 暂存操作会为每一个文件计算校验和(使用SHA-1哈希算法),然后会把当前版本的文件快照保存到Git仓库中(Git使用blob对象来保存他们),最终校验和加入到暂存区域等待提交
  • 提交操作: 当使用git commit进行提交操作时, Git会先计算每一个子目录的校验和,然后在Git仓库中这些校验和保存为树对象。随后,Git便会创建一个提交对象,它除了包含上面提到的哪些信息外,还包含指向这个树对象(项目根目录)的指针。如此一来,Git就可以在需要的时候重现此次保存的快照。
  • blob对象保存文件快照, 树对象记录着目录结构和blob对象索引,提交对象包含着指向树对象的指针和所有提交信息
  • Git分支其实本质上仅仅是指向提交对象的可变指针。Git的默认分支名字是master。在多次提交操作之后,其实已经有一个指向最后那个提交对象的master分支。它会在每次的提交操作中自动向前移动
  • Note: Git的“master”分支并不是一个特殊的分支, 跟其他分支完全没有区别。之所以几乎每个仓库都有master分支,是因为git init命令默认创建它,并且大多数人懒得去改动它
  1. 分支创建
  • 如何创建分支: git branch命令只是创建了一个可以移动的新的指针
  • 怎么知道当前在那个分支上: git有一个名为HEAD的特殊指针。在git中它是一个指向当前所在的本地分支(将HEAD想象为当前分支的别名)。
  • 使用git log --decorate命令查看当前分支所指的对象
  1. 分支切换
  • 使用git checkout命令从testing分支切换到master分支上: git checkout做了两件事。一是使HEAD指回master分支,二是将工作目录恢复成master分支所指向的快照内容。
  • Note: 分支切换会改变你工作目录中的文件。在切换分支时,一定要注意你工作目录里的文件会被改变。如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。如果Git不能干净利落的完成这个任务,它将禁止切换分支
  • 由于git分支实质上仅是包含所指对象校验和(长度为40的SHA-1值字符串)的文件,所以它的创建和销毁都异常的高效。创建一个分支相当于往一个文件中写入41个字节。
  1. fast-forward:
  • 当你试图合并两个分支时,如果顺着一个分支走下去能够到达另一个分支,那么Git在合并两者的时候,只会简单的将指针向前推进(指针右移),因为这种情况下的合并操作没有需要解决的分歧–这就叫做“快进(fast-forward)”。
  1. 推送
  • 本地分支并不会自动与远程仓库同步–你必须显示地推送想要分享的分支。
  • 使用git push将本地分支推送到远程仓库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值