Git学习笔记(Learn Git Branch)

待更新

写在前面

官网

参考:http://www.jnnr.cn/news_show_806.html

通过该游戏来体验学习Git的各种命令,不仅可以很好的学习git的思想(可视化非常形象,和git bash那个黑框的感觉完全不一样)。

而且英文官网还可以进一步锻炼专业相关英文阅读能力,词汇也很简单。

十分推荐。

一、基础篇(git主要命令)

1. git commit

功能:将增量修改的内容进行提交
示例:(解释:C0、C1是分开的两次提交记录,其中C0 是C1 父分支,即C1是基于C0增量修改提交的,MAIN意思是箭头指向的之处的分支线叫MAIN分支,其标指向的就是该分支最新的提交处,其中*号意思是你目前正在操作的分支,是一个标记。)
在这里插入图片描述
GIT COMMIT 之后
在这里插入图片描述
此时增加C2提交记录,且是基于C1的,仍然是MAIN分支线上的延申。

游戏答案:
GIT COMMIT
GIT COMMIT

2. git branch 分支名 | git checkout 分支名

- GIT BRANCH 分支名 -
功能 :即在现在的分支线上开辟另一个分支(有点像开一个分叉树枝的芽),在该节点之前的内容都是相同的,之后提交的内容就只能在一个分支上延申。
示例
在这里插入图片描述
GIT BRANCH NEWIMAGE
在这里插入图片描述
(解释:我们可以看到现在多了一个NEWIMAGE分支,但是因为我们只是新建分支,也就是多了一个芽而没有树干,所以两个分支都在C1处。
此时如果我们输入
GIT COMMIT
在这里插入图片描述
MAIN分支往前一步,当前分支还是MAIN,NEWIMAGE还是在C1处

- GIT CHECKOUT 分支名 -
功能 :切换当前操作的分支到特定分支名。
示例:(当前是MAIN分支)
在这里插入图片描述
GIT CHECKOUT NEWIMAGE
GIT COMMIT
在这里插入图片描述

最后其实还有个快捷键:GIT CHECKOUT -B 分支名 实现创建分支的同时切换该分支为当前操作分支

游戏答案:
GIT CHECKOUT -B BUGFIX

3. git merge 分支名 | git rebasse 分支名

- GIT MERGE 分支名 -
功能:将当前分支和另一个指定分支合并,可能会产生新的结点,也可能不会,看下面示例。
示例
在这里插入图片描述
GIT MERGE BUGFIX
在这里插入图片描述
GIT CHECKOUT BUGFIX
GIT MERGE MAIN
在这里插入图片描述

GIT MERGE游戏答案:
GIT CHECKOUT -B BUGFIX
GIT COMMIT
GIT CHECKOUT MAIN
GIT COMMIT
GIT MERGE BUGFIX

GIT REBASE 分支名
作用:即将当前的分支合并到另一分支,但是合并的方式不是多一个结点,而是将当前分支的所有多出来的修改全部加到另一个分支,这时整体上看只有一条线性发展。而不是分开同步运行后合并的视角,而是将并行转化成前后的同步关系
示例
在这里插入图片描述
GIT REBASE MAIN
在这里插入图片描述
GIT CHECKOUT MAIN
GIT REBASE BUGFIX
在这里插入图片描述

二、高级篇

1. 分离HEAD(git checkout 记录结点名)

作用:分离HEAD,就是我们可以操作的当前位置不再是对分支而是可以对某次记录也就是结点。
解释:HEAD默认就是指向分支名的,即我们看到的*指向的分支,当我们分支COMMIT后,我们HEAD会往前走,分支便也会自动往前走,而如果我们指向具体历史记录COMMIT后,HEAD往前走,分支原地不动,这就是分离HEAD脱离了分支。
即原本 HEAD->MAIN分支->C1结点 变成 HEAD->C1 这就是分离
示例:
在这里插入图片描述
GIT CHECKOUT MAIN
在这里插入图片描述
没有变化,因为HEAD->BUGFIX->C4,即使GIT COMMIT两者同步向前
GIT CHECKOUT C4
在这里插入图片描述
HEAD->C4 分离开来
GIT COMMIT
在这里插入图片描述
HEAD会往前走,但分支不会动

2. 相对引用(git checkout 分支名^ | git checkout 分支名~num)

作用:分离HEAD的时候可以通过当前分支相对的移动,这样我们可以不用记住某结点哈希值(可以通过GIT LOG查看)。这里说一说结点哈希值是什么,我们会发现我们之前分支名都是C1之类的,其实C1只是这个结点哈希值的头两个值,但因为具有区分唯一性,所以我们可以只打开头两个字符,全名可能是:C4D2DA64C0EFC5293610BDD892F82A58E8CBC5D8。所以相对引用就是HEAD的设置不根据哈希值来确定,可以通过相对位置确定。因为分支名字相对于结点名字更加的容易记住和使用。
示例:
在这里插入图片描述
GIT CHECKOUT MAIN^
在这里插入图片描述
第二个例子:
在这里插入图片描述
GIT CHECKOUT C3
GIT CHECKOUT HEAD^
GIT CHECKOUT HEAD^
GIT CHECKOUT HEAD^
在这里插入图片描述
第三个示例:
在这里插入图片描述
GIT CHECKOUT HEAD~4
在这里插入图片描述
第四个示例:
在这里插入图片描述
GIT BRANCH -F MAIN HEAD~3
相对引用为我们提供了一种简洁的引用提交记录 C1 的方式, 而 -F 则容许我们将分支强制移动到那个位置。
在这里插入图片描述

第一个游戏答案:
GTI CHECKOUT BUGFIX^
第二个游戏答案:
GIT CHECKOUT HEAD^
GIT BRANCH -F MAIN C6
GIT BRANCH -F BUGFIX HEAD^

第二个游戏:

题目:

image-20211009223958622

Goal:

image-20211009224016584

  • 首先移动HEAD
1
git checkout HEAD^
  • 然后转移分支main
1
git branch -f main C6
  • 最后移动分支bugFix
1
2
3
4
5
git branch -f bugFix HEAD^
或者
git branch -f bugFix HEAD~1
或者
git branch -f bugFix C0
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2022 Doke
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信