0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Git分支,为何以及如何使用分支

Linux爱好者 来源:未知 作者:李倩 2018-06-11 11:08 次阅读

在本系列的前两篇文章中,我们开始使用 Git,学会如何克隆项目,修改、增加和删除内容。在这第三篇文章中,我将介绍 Git 分支,为何以及如何使用分支。

不妨用树来描绘 Git 仓库。图中的树有很多分支,或长或短,或从树干延伸或从其它分支延伸。在这里,我们用树干比作仓库的 master 分支,其中master代指 ”master 分支”,是 Git 仓库的中心分支或第一个分支。为简单起见,我们假设master是树干,其它分支都是从该分支分出的。

为何在 Git 仓库中使用分支

使用分支的主要理由为:

如果你希望为项目增加新特性,但很可能会影响当前可正常工作的代码。对于该项目的活跃用户而言,这是很糟糕的事情。与其将特性加入到其它人正在使用的master分支,更好的方法是在仓库的其它分支中变更代码,下面会给出具体的工作方式。

更重要的是,Git 其设计用于协作。如果所有人都在你代码仓库的master分支上操作,会引发很多混乱。对编程语言或项目的知识和阅历因人而异;有些人可能会编写有错误或缺陷的代码,也可能会编写你觉得不适合该项目的代码。使用分支可以让你核验他人的贡献并选择适合的加入到项目中。(这里假设你是代码库唯一的所有者,希望对增加到项目中的代码有完全的控制。在真实的项目中,代码库有多个具有合并代码权限的所有者)

创建分支

让我们回顾本系列上一篇文章,看一下在我们的 Demo 目录中分支是怎样的。如果你没有完成上述操作,请按照文章中的指示从 GitHub 克隆代码并进入 Demo 目录。运行如下命令:

pwd

git branch

ls -la

pwd命令(是当前工作目录的英文缩写)返回当前你所处的目录(以便确认你在Demo目录中),git branch列出该项目在你主机上的全部分支,ls -la列出当前目录下的所有文件。你的终端输出类似于:

在master分支中,只有一个文件README.md。(Git 会友好地忽略掉其它目录和文件。)

接下来,运行如下命令:

git status

git checkout -bmyBranch

git status

第一条命令git status告知你当前位于branch master,(就像在终端中看到的那样)它与origin/master处于同步状态,这意味着 master 分支的本地副本中的全部文件也出现在 GitHub 中。两份副本没有差异,所有的提交也是一致的。

下一条命令git checkout -b myBranch中的-b告知 Git 创建一个名为myBranch的新分支,然后checkout命令将我们切换到新创建的分支。运行第三条命令git status确保你已经位于刚创建的分支下。

如你所见,git status告知你当前处于myBranch分支,没有变更需要提交。这是因为我们既没有增加新文件,也没有修改已有文件。

如果希望以可视化的方式查看分支,可以运行gitk命令。如果遇到报错bash: gitk: command not found...,请先安装gitk软件包(找到你操作系统对应的安装文档,以获得安装方式)。

(LCTT 译注:需要在有 X 服务器的终端运行gitk,否则会报错)

下图展示了我们在 Demo 项目中的所作所为:你最后一次提交(的对应信息)是Delete file.txt,在此之前有三次提交。当前的提交用黄点标注,之前的提交用蓝点标注,黄点和Delete file.txt之间的三个方块展示每个分支所在的位置(或者说每个分支中的最后一次提交的位置)。由于myBranch刚创建,提交状态与master分支及其对应的记为remotes/origin/master的远程master分支保持一致。(非常感谢来自 Red Hat 的Peter Savage让我知道gitk这个工具)

下面让我们在myBranch分支下创建一个新文件并观察终端输出。运行如下命令:

echo"Creating a newFile on myBranch" > newFile

cat newFile

git status

第一条命令中的echo创建了名为newFile的文件,接着cat newFile打印出文件内容,最后git status告知你我们myBranch分支的当前状态。在下面的终端输出中,Git 告知myBranch分支下有一个名为newFile的文件当前处于untracked状态。这表明我们没有让 Git 追踪发生在文件newFile上的变更。

下一步是增加文件,提交变更并将newFile文件推送至myBranch分支(请回顾本系列上一篇文章获得更多细节)。

git add newFile

git commit -m"Adding newFile to myBranch"

git push origin myBranch

在上述命令中,push命令使用的分支参数为myBranch而不是master。Git 添加newFile并将变更推送到你 GitHub 账号下的 Demo 仓库中,告知你在 GitHub 上创建了一个与你本地副本分支myBranch一样的新分支。终端输出截图给出了运行命令的细节及命令输出。

当你访问 GitHub 时,在分支选择的下拉列表中可以发现两个可供选择的分支。

点击myBranch切换到myBranch分支,你可以看到在此分支上新增的文件。

截至目前,我们有两个分支:一个是master分支,只有一个README.md文件;另一个是myBranch分支,有两个文件。

你已经知道如何创建分支了,下面我们再创建一个分支。输入如下命令:

git checkout master

git checkout -bmyBranch2

touch newFile2

git add newFile2

git commit -m"Adding newFile2 to myBranch2"

git push origin myBranch2

我不再给出终端输出,需要你自己尝试,但你可以在GitHub 代码库中验证你的结果。

删除分支

由于我们增加了两个分支,下面删除其中的一个(myBranch),包括两步:

删除本地分支你不能删除正在操作的分支,故切换到master分支 (或其它你希望保留的分支),命令及终端输出如下:

git branch可以列出可用的分支,使用checkout切换到master分支,然后使用git branch -D myBranch删除该分支。再次运行git branch检查是否只剩下两个分支(而不是三个)。

删除 GitHub 上的分支使用如下命令删除myBranch的远程分支:

git push origin :myBranch

上面push命令中分支名称前面的冒号(:)告知 GitHub 删除分支。另一种写法为:

git push -dorigin myBranch

其中 -d (也可以用 --delete) 也用于告知 GitHub 删除你的分支。

我们学习了 Git 分支的使用,在本系列的下一篇文章中,我们将介绍如何执行 fetch 和 rebase 操作,对于多人同时的贡献的项目而言,这是很必须学会的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MASTER
    +关注

    关注

    0

    文章

    102

    浏览量

    11244
  • Git
    Git
    +关注

    关注

    0

    文章

    196

    浏览量

    15715
  • GitHub
    +关注

    关注

    3

    文章

    464

    浏览量

    16351

原文标题:Git 分支操作介绍

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于git的远程分支的详细介绍

    不知道大家有没有经历过,当我们切换到了一个新的分支想要提交代码的时候,总会遇到这样的错误。 我们把日志里的英文翻译过来是说,我们当前的分支没有设置任何上游分支。然后git提示我们可以运
    的头像 发表于 10-11 10:03 3175次阅读
    关于<b class='flag-5'>git</b>的远程<b class='flag-5'>分支</b>的详细介绍

    CPU分支预测对程序的影响

    分支预测的英文名字是“Branch Prediction”,如果大家在Google上搜索这个关键字,可以看到关于分支预测的很多内容。不过,要搞清楚分支预测是如何工作的,才是问题的关键。
    发表于 09-23 14:11 1076次阅读

    Git命令之本地分支与远程分支关联和解除

    在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,并使用git push命令将自己本地的修改推送到远程仓库。但是如果此
    的头像 发表于 12-15 09:27 2869次阅读
    <b class='flag-5'>Git</b>命令之本地<b class='flag-5'>分支</b>与远程<b class='flag-5'>分支</b>关联和解除

    labview事件结构的添加分支控件为什么分支是灰色的

    labview事件结构的添加分支控件为什么分支是灰色的,没办法自定义输入
    发表于 11-07 20:13

    git简单使用(一)

    仓库,以及如何进行分支控制:1.创建一个文件夹mkdir git-study2.初始化仓库git init3.查看下当前分支
    发表于 02-17 16:18

    git merge后,原分支的内容没有出现在新的master分支中。

    我新建了一个rico分支,现在想把rico分支的内容合并到master分支,但是合并之后,我在rico分钟中新建的文件夹,并没有出现在master中,这是为什么呢??rico分支中有
    发表于 03-12 00:48

    有线电视分支

    有线电视分支器实际是一种定向信号传输器件(内装定向藕合器)。一分支、二分支、四分支、八分支等多种类型,
    发表于 07-08 11:41 6603次阅读

    Git Flow应该抛弃的原因

    Git-flow 是一种分支和合并方法。十年前,因为一篇名为「一个成功的 Git 分支模型」的文章,Git-flow 变得广为人知。
    的头像 发表于 03-21 13:41 1465次阅读
    <b class='flag-5'>Git</b> Flow应该抛弃的原因

    电缆分支箱安装_电缆分支箱的应用

    你真的对电缆分支箱安装都非常的了解了么?在安装之前要准备什么、安装要注意什么、安装好之后又该如何验收等等,笔者特别提醒大家电缆分支箱安装好了才可以确保后期的稳定使用,下面就由生产厂家红苏电器为大家详细介绍电缆分支箱安装知识。
    发表于 12-24 16:43 3787次阅读

    Git / GitHub 是什么?有什么用?

    分支Git 里很重要的概念,大家可以使用 Learning Git Branching 这个在线游戏来学习和理解分支
    发表于 12-09 09:39 882次阅读

    Git分支管理

    在项目的开发过程中,很多时候都会使用Git托管工具进行项目文件或者代码的管理,方便团队成员之间的协作开发。使用Git进行项目管理目前也是越来越受到欢迎,除了Git还有很多的其他项目管理,其目的都是为了能够方便项目管理、团队协作开
    的头像 发表于 02-20 14:49 977次阅读
    <b class='flag-5'>Git</b>的<b class='flag-5'>分支</b>管理

    git拉取远程分支到本地的两种方法

    使用这种方式会在本地仓库新建分支xxx,并自动切换到新建的分支xxx,当然了远程分支xxx的代码也拉取到了本地分支xxx中。采用这种方法建立的本地
    的头像 发表于 05-06 09:19 1.5w次阅读

    git rebase与相关git merge命令比较

    。 #概念     首先要理解的是git rebase和git merge解决了同样的问题。这两个命令都旨在将更改从一个分支集成到另一个分支 - 它们只是以不同的方式进行。试想一下当你
    的头像 发表于 05-26 16:22 808次阅读
    <b class='flag-5'>git</b> rebase与相关<b class='flag-5'>git</b> merge命令比较

    git rebase和git merge的区别

      解决冲突 git rebase和git merge的区别 分支合并 git merge是用来合并两个分支的。 比如:将 b
    的头像 发表于 07-05 09:54 599次阅读
    <b class='flag-5'>git</b> rebase和<b class='flag-5'>git</b> merge的区别

    何以及为何要在EtherCAT®应用中使用DP83826

    电子发烧友网站提供《如何以及为何要在EtherCAT®应用中使用DP83826.pdf》资料免费下载
    发表于 08-27 10:19 0次下载
    如<b class='flag-5'>何以及</b><b class='flag-5'>为何</b>要在EtherCAT®应用中使用DP83826