0


Git从入门到熟练第八讲 创建和使用分支

前言

在上一讲中我们讲到了git中时间线和提交commit的关系,还介绍了master,HEAD,branch的基本概念。这一讲内容我们学习非常重要的对分支的操作,其中包括:创建分支、分支切换、删除分支以及分支节点的切换。

课前准备:

https://download.csdn.net/download/qq_17204647/86969196

下载这个资源然后解压,运行文件中的下图文件,(右击-git bash here-输入下面代码)

bash make_math_repo.sh

在同一目录下会生成math文件夹,里面有本章所有操作后的样子。

8.1 分支简介

几乎所有的版本控制系统都在某种形式上支持分支,但是在大多数版本控制系统中,分支的使用是较为低效的过程----常常需要完全创建一个源代码的副本。

但是Git的分支模型却极为轻量,就算是大型项目,创建分支也能在瞬间完成。在不同分支间的切换操作也是一样轻便。

Git分支的创建和合并功能因此也频繁被使用。

之前我们曾学过,当我们创建git仓库时(Repository),Git 会自动创建默认名为master的分支。而在这一章节,我们会看到分支会像树一样,从下往上生长。

8.1.1 master分支不是必要的分支

当我们创建git的时候,git默认给我们创建了一个名为master的分支,因此很多初学git的人认为这是一个特殊的,重要的分支。实际上,这个分支和我们建立的其他所有分支一样,没有什么特殊的,我们甚至可以删除它!

mkdir empty                                 //创建empty文件夹
cd empty                                    //进入文件目录
git init                                    // 创建git仓库
touch foo                                   //创建名为foo的文件
git add foo     
git commit -m "committing the file foo"     //提交修改
git branch                                  //查看当前所有分支

以上操作后,结果如图

其中星号*代表当前所在分支。

git branch dev              //创建名为dev的分支
git branch

结果如图

我们先切换分支后,将master分支删除

git checkout dev            //切换分支
git branch -d master        //删除master分支
git branch

结果如图

我们可以看到,master分支被删除。但是由于dev分支是在master分支建立并提交foo之后节点创建的,因此dev分支在这里享有和master相同的内容。

因此,请记住,master不是特殊分支,重要的分支是你在项目中,自己决定的。

8.2创建和删除分支

8.2.1 创建分支

在我们的项目中,主分支上的提交,是主要的,干净可运行的代码。

创建分支一般有两种情况,一是我们需要给项目添加新的代码,二是对之前代码进行修改。

第一种情况,如果我们添加新代码在主分支上进行,极有可能导致整个系统崩溃,而且添加新的代码功能常常需要一段时间才能完成。而这段时间,我们不可能让主分支上的代码暴露,完全处于停滞状态。

第二种情况,对于修改bug或是修改代码,常常会引出其他意想不到的bug(如复合式bug)

这个时候,我们就需要创建分支,将我们的工作区域和主分支的工作区域分隔开来。

8.2.1.1 为了添加新内容创建分支

git branch              //查看分支
git branch 分支名       //创建新分支
git checkout 分支名     //切换到指定分支

在当前的节点,输入如下代码,这样我们就得到一个名为new_feature新分支

git branch new_feature

输入gitk可以看到如下图

然后转到新建的分支,新建文件并提交

git checkout new_feature      //切换到new_feature分支

echo "new file" > newfile.txt
git add newfile.txt
git commit -m "Adding a new file to a new branch"
echo "another new file" > file3.c
git add file3.c
git commit -m "Starting a second new file"

输入gitk,可以看到如下图

上面的查看是在GUI中查看的分支情况,实际上在命令行窗口也可以查看,输入

git log --graph --decorate --pretty=oneline --all --abbrev-commit

显示如下图

tips:上面git的命令行太长,而查看提交的分支情况又是常用的命令,因此我们可以用自定义别名来将上面命令变短,操作如下

我们选用lol 作为自定义的git命令别称,然后输入如下代码

git config --global alias.lol "log --graph --decorate --pretty=oneline --all --abbrev-commit"

测试如图:

注意:在这里我们需要明确一点,分支间是相互独立的。

我们可以在master分支上进行一次修改并提交,

echo "A small update." >> readme.txt
git commit -a -m "A small update to readme."

在gitk中,为了能够查看所有分支情况,在view-new view

选择黑线框并apply,得到如下显示

其中加粗显示的为当前分支,在分支名位置右击,可以如下显示,对分支进行操作

还有一种更明显的方式能够比较两个不同的工作环境,输入下面代码,并查看工作目录

git checkout master
git checkout new_feature

两个分支下,工作目录分布如下图

(master分支下文件) (new_feature分支下文件)

8.2.1.2 修改代码(更常见)

直接转到你需要修改代码的节点,创建分支

git branch 新分支名 SHA1 ID

还有一种更快创建分支的命令

git checkout –b 分支名 start point   //创建分支同时让该分支为当前分支

其中start point可以是分支名,SHA1 ID或者是一个tag

实践输入如下命令

git branch another_fix_branch 7eb1b19                //在7eb1b19节点创建新分支
git checkout -b fixing_readme another_fix_branch     //在another_fix_branch所在节点创建新分支

结果如下图

8.2.2 删除分支

当你创建分支,一般是因为你想尝试一些东西。而有时候这些尝试失败了,则需要删除分支。

git branch –d 分支名   //删除指定分支

删除分支时,记住要先切换到主分支再进行删除操作,不然会显示错误

注意删除这个操作没有自动防故障装置,很容易便可以删除。

但是如果你误删了需要的分支,可以通过以下操作进行补救。

git branch -d fixing_readme          //删除fixing_readme  分支
git branch -d another_fix_branch     //删除another_fix_branch 分支
git checkout -b another_fix_branch 7eb1b19  //恢复误删分支

如果你误删比较久,找不到SHA1 ID,可以输入

git reflog

然后能够显示所有对分支的操作。

8.3 分支安全切换

如果你是在分支中仅增加了新文件,则可以切换到其他分支。

但是如果对分支内容进行修改更新时,如果没有提交更新时无法切换到其他分支的。

但是如果没有完成修改不想提交这个修改,又想切换到其他分支时,可以使用git stash 暂时保存你的修改。这样你就可以切换到其他分支。

回到原先分支继续修改,则可以通过

git stash list          //查看stash里内容
git stash pop          //将stash内修改取出,变成和git stash命令前一样

这里的实践操作可以在课前准备生成的git仓库下进行操作

git checkout another_fix_branch   //切换到another_fix_branch 分支

在math.sh文件中添加一行 c=0 ,切换到master分支

git status
git checkout master

出现如图问题,不能切换分支。

输入 git stash,重复上述命令,顺利切换分支!

而当我们回到原先分支,输入git stash pop命令就可以继续先前操作。

(pop前代码行) (pop后代码行)

总结:

本章介绍了git分支的创建和删除操作,还介绍了误删分支时,如何恢复分支。简单讲解了git stash在分支切换时,挂起修改的作用。

标签: git github

本文转载自: https://blog.csdn.net/qq_17204647/article/details/115834465
版权归原作者 莫蘭 所有, 如有侵权,请联系我们删除。

“Git从入门到熟练第八讲 创建和使用分支”的评论:

还没有评论