03—分支内幕原理

1、分支的基础知识

1-1、分支的介绍

分支其实就是指针,执行commit对象

1-2、创建一个分支

git branch testing ,可以创建一个新的分支,此时这个分支的指针会指向当前你所在的分支所指向的commit object 上。

如何查看各个分支指向哪个commit object 呢?使用 git log --oneline --decorate 命令即可,会给你显示出来

1-3、切换分支

git checkout testing,此时就可以切换到 testing 分支,此时 HEAD 指针会指向 testing 分支。

git checkout -b testing ,这是一个组合命令,创建分支的时候就切切换到该分支了。

此时如果在 testing 分支上提交代码,那么 commit 树就会长出一个新的 commit object ,而 testing 分支指针会指向最新的 commit object ,HEAD继续指向 testing 分支指针,而master 指针还是指向之前的那个 commit object。

git checkout master ,会切回到 master 分支,此时 HEAD 指针会指向 master 指针,同时将 master 指针指向的那个 commit object ,对应的 tree 和 其中的 blob,也就是对应文件快照恢复到工作区中。

2、远程分支

在你本地你可以创建一个分支,然后开发代码,但是后续的话,你肯定是要将本地分支推送到远程仓库里面去的。

git push -u origin 分支名称

这个命令执行,表示将当前所在的分支同后面远程的分支名称关联起来,这样后面执行 git push 或者 git pull的时候,就直接代表拉取或者推送到相应的远程分支上面去了,一般这个分支名称就是写当前所在的分支名称。

如果其他人要将某个远程仓库的分支拉取下来,应该执行一个命令,叫做git fetch origin,就会抓取下来远程仓库新增了哪些分支。

接下来可以执行一个命令 git checkout -b 本地分支 origin/远程分支,然后这个命令一执行,就是在本地创建了一个远程分支对应的本地分支,互相关联起来。以后呢,每次如果别人更新了那个分支的代码,push 到了远程仓库,你可以执行 git pull 命令,将这个分支在远程仓库的代码拉取下来,跟本地分支的代码进行合并。

举个栗子:假设我们公司 git 服务器地址是 git.leslie.com ,然后我们如果用git clone命令,从这个服务器克隆一个版本库下来,git默认会将远程版本库名为 origin,同时在本地创建一个指向远程版本库的 master 分支的本地分支,叫做 origin/master。此外,git也会在本地创建一个 master 分支,内容就是跟 origin/master 分支一样的。从git 服务器克隆版本库下来的时候,远程版本库的commit 树会一同拷贝下来,然后 origin/master 指向的 commit,就是远程版本库的master指向的commit,同时给本地创建的 master 也是指向这个commit。

此时,如果你在本地做了不少开发,然后本地 master 移动了好几个 commit ,同时 origin/master 还是指向最开始的那个 commit,而同时,远程版本库上,其他同事也提交了几次代码,因此远程版本库上的 commit 也移动了几个 commit,此时如果要让本地和远程保持同步,需要使用 git fetch origin 命令,该命令会将远程版本库的 commit 树和所有的分支都拉取下来,跟本地的 commit 树进行合并,此时可能就会在本地形成一颗有两个分叉的 commit树,本地 origin/master 会指向远程版本库的master 指向的那个 commit ,本地的master 继续指向之前本地最新的那个 commit。

3、分支命令管理

git branch 直接执行,会显示出当前所有分支列表,以及你在哪个分支上工作
git branch -v 可以显示出每个分支当前所指向的commit object
git branch -vv 在 -v 的基础上可以显示本地分支跟踪的远程分支
git branch --merged 可以看到哪些分支被merge 进了当前分支
git branch --no-merged 可以看到哪些分支还没有merger 进当前分支
git branch -d 分支名 删除一个分支,可能会提示你被删除的分支还没有被merge到当前分支,<br />不让你删除该分支,此时可以使用git branch -D 分支名,强制删除一个分支
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,855评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,902评论 0 11
  • 人真的很奇怪 越想要的东西越小心翼翼 越小心翼翼就越在失去 没那么想要的东西 反倒轻而易举 或者说反倒因你的洒脱而...
    不作妖的你真可爱阅读 137评论 0 0
  • 梦想成真_df9a阅读 114评论 0 0