Git 分支基本使用

GitHub154 次阅读12 分钟

1、分支的概念**#**

分支是 git 的一个重要特性,它可以让开发人员从主线上分离出来,在一个独立的线路上继续开发,最后可以灵活的选择合并分支,还是丢弃分支。用一个生活中的例子,来理解分支:

image.png

比如我们正在写一本小说,这本小说的当前内容就像是 git 中的 master 分支,现在我们有几个新的想法,
比如:新的角色、新的剧情,但不确定这些是否最终一定出现在故事里,所以我们可以这样做:
1. 可以为每个新的想法,创建一个新的笔记本(一个笔记本就相当于 git 中的一个新分支)
2. 每个笔记本(分支)中都可以自由地探索想法,且不会搅乱你的当前内容(master 分支)
3. 当我们觉得一个剧情线非常好,并且想要将其包含在故事中时,就会把那个笔记本的内容(分支)
合并到你的当前内容(master 分支)中。
4. 如果某个想法实验失败,可以选择抛弃那个笔记本(相当于 git 中的删除分支),
且这个过程不会影响当前内容(master分支)

2、创建与切换分支**#**

● 使用git branch xxx可以创建分支,其中xxx是分支名字

image.png

备注:创建完 test 分支后,tets 分支并不是空的,而且保留了 master 分支当前所有的提交记录。

● 使用git branch可以查看所有分支

image.png

● 使用git checkout xxx可以切换分支

image.png

● 注意点如下: ① 切换分支前,最好把当前分支管理好,即最好进行:add、commit操作。 ② 切换分支后,工作区、暂存区、会受到影响,具体为:

● 工作区:会变为切换到的分支的最后一次提交的状态

● 暂存区:同上,且如果暂存区有未提交的更改,那这些更改会被带到新分支的暂存区上。

比如:在 test 分支对 x 文件进行了暂存,没提交,随后切换到 master 分支时,x 文件会自动加在 master 分支的暂存区

3、合并分支(快速合并)

例如我们有 master 和 test 两个分支,test 分支是领先于 master 分支的,且 tets 分支包含 master 的所有历史记录,那么这时就可以触发 git 的快速合并,具体演示如下:

  1. 第一步:创建 a、b 两个文件,随后提交到 master 分支。 image.png
  2. 第二步:创建 test 分支,随后在 test 分支创建一个 c 文件,随后提交到 test 分支。 image.png
  3. 第三步:切回 master 分支 此时发现工作区中 c 文件消失(因为 master 分支中没有 c 文件)。 image.png
  4. 第四步:把 test 分支合并到 master 分支 使用git merge test合并分支,合并成功后,会发现工作区中已经有了 c 文件,且可以查看到 c 文件的提交记录。 image.png

4、合并分支(提交合并)****#

场景描述:当进行分支合并时,若两个分支有不一致的版本,则会提示输提示输入提交信息,在当前分支形成一个新的提交记录,具体场景请执行上述15.3的前三步,然后接下来执行下面步骤:

第一步:切到 master 分支后,创建 d 文件,随后提交到 master 分支。

image.png

第二步:在 master 分支中合并 test 分支 输入git merge test命令,进行分支合并

image.png

出现如下提示,含义是本次分支合并,存在不一样的版本,请为生成的新版本编写说明

image.png

输入完说明后,保存并退出随后提示合并完毕,随后提示合并完毕

image.png

5、删除分支**#**

● git branch -d xxx可用于删除一个分支,其中xxx是分支名,例如我们删除 test 分支:

image.png

● 若删除时提示下图,说明:要删除的分支包含了一些尚未合并到其他分支的内容。

image.png

解决办法有三种:

○ 第一种方式:将要删除的分支合并到一个其他的分支,再进行删除。
○ 第二种方式:使用git branch -D xxx强制删除。
○ 第三种方式:使用git config advice.forceDeleteBranch false命令关掉该提示。

6、分支变基**#**

在 Git 中,合并(merge)和变基(rebase)都是用于整合来自不同分支的更改的操作,它们区别如下:

● 合并(merge): 将两个分支的历史合并在一起,gti 会创建一个新的“合并提交”,所有的分支和合并点都会被保留在历史中,有完整的历史记录。

image.png

● 变基(rebase) 将一个分支(test)上的提交重新应用到另一个分支(master)上,变基会重写项目历史,因为它实际上是在创建一系列新的提交,会产生一个更线性的历史记录,看起来更干净、更简单。

image.png

7、tag(标签)****#

在Git中,标签(Tag)是用来指向特定提交的引用,通常用于标记项目中的重要点,比如版本发布。标签分为两种类型:

  1. 轻量标签(Lightweight) 轻量标签只是简单地指向一个提交,不包含其他信息,创建轻量标签不会存储任何额外的信息。
  2. 附注标签(Annotated) 附注标签存储了额外的信息,例如:标签名、标签信息、创建者名字、电子邮件、创建日期等。因为它们包含了更多的信息,附注标签更适用于公共或正式发布的场合,比如软件版本的发布。 创建标签
命令 作用
git tag 标签名 版本号 给指定提交打 轻量标签
git tag -a 标签名 版本号 -m “标签描述” 给指定提交打 附注标签
上述两个命令可以不写版本号,不写就是给最新提交打标签
git tag 查看标签
git show 标签名 查看标签信息
git tag -d 标签名 删除标签

8、游离分支**#**

git checkout也可以将代码签出到指定版本,即可以执行git checkout 具体版本号,当签出到指定版本时,签出的代码出于一个游离分支中,如下图操作:

image.png

游离分支上可以对代码进行版本控制,但要注意:一旦从游离分支切走,游离分支的提交不会交给任何一个分支,所以对于游离分支我们的原则是:

1. 尽量不修改游离分支的代码(只是看一看某个版本的代码)。
2. 若确实需要修改游离分支代码,应该从当前游离分支,创建出一个新的分支,随后去修改。
3. 若修在游离分支上发生了提交,随后从游离分支切走了,就要使用 reflog 寻找游离分支的提交。

继续阅读

基于全文检索与主题相似度