# Git 分支、远程仓库、tag 标签,原理、项目实践与应用

TIP

从本节内容开始,我们将重点讲解 Git 分支、Git 远程仓库 和 tag 标签相关内容,具体如下:

  • Git 分支:创建、切换、删除、合并分支
  • Git 远程仓库:创建、删除、操作远程仓库(添加、查看、重命名、移除、克隆、推送、拉取)
  • tag 标签:创建、删除、列出、共享标签

# 一、Git 分支操作

TIP

Git 分支的创建、切换、合并、删除及分支合并时如何解决冲突都是 Git 非常重要的一部分。本小节我们将一边通过图解解说原理,一边实操的方式帮助大家理解分支。

# 1、Git 分支是什么

TIP

分支可以理解为从主线分离出来的多个生产线,多个分支可以理解为多个生产线,每个生产线上都有自己的任务,但对主线又没有影响。当分支上的任务做完后,可以合并到主线上。

下图有三个分支,其中 master 为主分支,我们可以按排一个人在 pro1 分支开发登录功能,再按排一个人在 pro2 分支上开发注册功能。但 pro1 分支与 pro2 分支上开发并不会影响 master 分支的开发。

当登录功能和注册功能开发完后,我们可以合并到 master 分支,这样整个项目的登录功能和注册功能开完了。

image-20231208192908144

在前面们的学习中,我们其实已经接触过分支,也就是我们前面提到的master分支。master分支是我们在使用git init初始化本地仓库时,Git 自动帮我们创建的。

我们可以在git init命令后,执行git status命令,在命令行中就会提示,当前所在分支为 master 分支。

image-20231124180812294

注:

master分支和我们接下来要讲解的分支是一样的,没有什么特别的地方,只是master分支是git在初始化本地仓库时,Git 自动帮我们创建的。所以在我们初始化本地仓库后,我们后续的开发默认就是在master分支上开发。

如果只有一个master分支,我们很难进行多人协作开发。如果我们能创建多个分支,我们就可以进行多人协作,每一个独立的功能版块都可以安排一个人,在一个单独的分支上来完成开发。

开发好之后,再将其它分支上的内容合并到 master 主分支。这样一个项目就可以多人协作,齐头并进一起开发,开发效率自然会更高效。

接下来,我们试图通过一边图解解说原理,一边实操的方式,帮助你理解如何创建分支、切换分支、合并分支、删除分支、在合并分支时遇到冲突如何解决。

# 2、创建 Git 项目

TIP

假设你现在要开发一个项目,那你就会新建一个web文件夹作为项目的根目录,此时文件夹中什么内容也没有。

接下来,你在当前web目录下执行git init初始化本地仓库,Git 就会帮你管理这个项目,同时会创建 master 分支。

git init # 初始化本地仓库
git status # 查看当前分支文件状态

image-20231125002923728

我们用以下图表示创建的 master 分支,红色表示在当前分支,灰色表示不在当前分支。

image-20231124182806865

注意:

此时master分支上还没有任何一次提交,所以我们不能在这个时候创建一个新的分支,因为创建分支是在某个提交版本的基础之上来创建的,如果一次提交都没有,是不可以创建分支的。

# 3、master 分支 - 生成 V1 版本

TIP

接下来我们在web文件夹下开始index.html新建文件,展开开发工作。

开发到一定阶段后, index.html文件内容如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div class="V1">V1版本内容-master</div>
  </body>
</html>

接下来,我们执行git addgit commit来生成项目的第一个版本 V1

git add .
git commit -m 'V1'

image-20231125003407123

此时 HEAD 指向 master 分支,master 分支指向 V1,可以执行git log --oneline命令来查看当前分支提交的历史记录

注意:

HEAD 指针永远指向当前分支的当前提交

git log --oneline  # 查看当前分支的提交历史记录

image-20231125003737972

image-20231124183908084

# 4、创建 dev 分支

TIP

通常我们会把master分支当前主分支,比如只在 master 分支上保留完全稳定的代码——有可能仅仅是已经发布或即将发布的代码。

而实际的开发,我们会单独创建一个分支(或多个分支)来完成项目的开发。

在这里,我们在 master 分支 V1 版本的基础上,创建dev分支,后面的开发工作在dev分支来做。

git branch dev   # 创建dev分支
git log --oneline # 创建分支后,我们可以执行这个命令查看当前分支提交记录,同时可以知道当前所在分支,及分支对应的版本

image-20231125004137455

还可以通过git branch命令来查看所有分支,*标注的为当前所在分支

git branch #查看所有分支,*标注的分支为当前所在分支

# 或
git branch -v  # 查看所有分支,以更详细的内容列出分支信息

image-20231125004758765

dev分支创建好后,master分支和dev分支都指向 V1,因为 dev 分支是在 V1 版本基础上创建的。不过目前 HEAD 指针仍然指向的是master,因为我们并没有将分支切的到 dev。

温馨提示:

创建分支,本质就是创建一个新的指针。

image-20231124185041170

# 5、切换到 dev 分支

分支创建好后,接下来,我们要切换到dev分支,从事项目后续开发工作。

git checkout dev  # 切换到dev分支
# 或
git switch dev  # 切换到 dev分支

image-20231125005140141

切换到dev分支后,HEAD 指针此时就会指向dev分支,dev 分支指向 V1 版本。(指向 V1 表示,当前暂存区,工作区的内容为 V1 版本对应的内容)

可以执行git log --oneline命令,查看当前分支提交记录

image-20231125005321731

image-20231124200146514

# 6、dev 分支 - 生成 V2 版本

dev分支上完成后续的功能开发,开发完后index.html文件内容如下:

<!-- 部分内容省略,只体现修改的核心内容-->
<body>
  <div class="V1">V1版本内容-master</div>
  <div class="V2">V2版本内容-dev</div>
</body>

接下来,我们执行以下两条命令,提交代码到本地仓库,生成 V2 版本

git add .    # 将变动添加到暂存区
git commit -m 'V2'   # 将暂存区内容提交到本地仓库,生成V2版本

接下来,可以执行以下命令,查看当前分支提交的历史记录

git log --oneline

image-20231125005937689

因为 V2 版本是在 V1 的基础上生成的,所以 V2 指向 V1,表示 V1 是 V2 的父对象。此时 HEAD 指向当前分支的当前提交,即 dev 分支的 V2 版本

image-20231124200027949

# 7、dev 分支 - 生成 V3、V4 版本

接下来,在 dev 分支上继续开发,index.html内容如下:

<!-- 部分内容省略,只体现修改的核心内容-->
<body>
  <div class="V1">V1版本内容-master</div>
  <div class="V2">V2版本内容-dev</div>
  <div class="V3">V3版本内容-dev</div>
</body>

然后执行以下两条命令,生成 V3 版本

git add .
git commit -m 'V3'

生成 V3 版本,再继续开发,index.html内容如下:

<!-- 部分内容省略,只体现修改的核心内容-->
<body>
  <div class="V1">V1版本内容-master</div>
  <div class="V2">V2版本内容-dev</div>
  <div class="V3">V3版本内容-dev</div>
  <div class="V4">V4版本内容-dev</div>
</body>

然后执行以下两条命令,生成 V4 版本

git add .
git commit -m 'V4'

接下来,我们执行以下命令,查看当前分支的提交记录

git log --oneline

image-20231125010640307

此时 HEAD 指向 dev 分支,dev 分支指向 V4 版本

image-20231124195921489

# 8、切换到 master 分支

TIP

就在你提交生成 V4 版本后,公司告知你master分支有bug需要修复。此时你就需要先暂停dev分支上项目的开发,去完成master分支上的 bug 修复。

这里你就需要先切换到master分支,然后在master分支 V1 版本的基础上创建hotfix分支,然后切换到hotfix分支,在hotfix分支上开始做 bug 修复。

执行以下命令,切换到master分支

git switch master  # 切换到master分支

注意:

切换分支后,暂存区和工作区的代码都会被修改成当前分支所在的当前版本的内容。所以在切换分支时,一定要把之前的内容提交生成版本,否则就会造成内容的丢失。

为了确定分支切换成功,一般我们会在分支切换成功后,执以下命令,查看当前所在的分支

git branch  # 查看所有分支,*标注的为当前所在分支

image-20231125011724793

切换到master分支后,此时 HEAD 指针指向master分支,master分支指向 V1。工作区和暂存区内容都为 V1 版本内容一致。

image-20231124195527870

# 9、创建 hotfix 分支

接下来,执行以下命令,在master的 V1 版本基础上创建hotfix分支

git branch hotfix # 在master分支的基础上创建hotfix分支

执行以下命令,查看所有分支,同时了解hotfix分支否创建成功

git branch # 查看所有分支,*标注为当前所在分支

image-20231125012406952

以上操作并没有切换到hotfix分支,所以 HEAD 指针依然指向master分支,master指向 V1

image-20231124195441094

# 10、切换到 hotfix 分支

接下来,我们切换到hotfix分支,开始对 bug 进行修复。

git switch hotfix # 切换到hotfix分支
git branch  # 查看所有分支
git log --oneline # 当前分支的提交记录

image-20231125013135306

因为hotfix分支是从master分支的 V1 版本处创建的,所以此时 HEAD 指针指向hotfix分支,hotfix分支指向 V1 版本,同时工作区和暂存区内容都为 V1 版本内容。

image-20231124195340612

# 11、hotfix 分支 - 生成版本 V5、V6

接下来在hotfix分支上开始修复 bug,index.html内容修改如下:

<!-- 部分内容省略,只体现修改的核心内容-->
<body>
  <div class="V1">V1版本内容-master分支</div>
  <div class="V5">V5版本内容-hotfix分支</div>
</body>

然后执行以下两条命令,生成 V5 版本

git add .
git commit -m 'V5'

生成 V5 版本,再继续开发,index.html内容如下:

<!-- 部分内容省略,只体现修改的核心内容-->
<body>
  <div class="V1">V1版本内容-master分支</div>
  <div class="V5">V5版本内容-hotfix分支</div>
  <div class="V6">V6版本内容-hotfix分支</div>
</body>

然后执行以下两条命令,生成 V6 版本,V6版为 bug 修复完成的最终版。

git add .
git commit -m 'V6'

接下来,我们执行以下命令,查看当前分支的提交记录

git log --oneline  # 当前分支的提交记录

image-20231125013707447

image-20231124203826750

# 12、合并分支(hotfix 合并到 master)

TIP

hotfix分支上完成 bug 修复后,我们需要将修复好的代码合并到master分支,合并后对外发布。

注意:

需要将代码合并到哪个分支,我们就需要切换到哪个支,然后再完成合并操作。

比如要将dev分支代码合并到master分支,就需要切换到master分支,然后再将 dev 分支代码合并过来。

执行以下命令,换到master分支

git switch master  # 切换到master分支

image-20231124205944181

然后执行以下命令,将 dev 分支合并到 master 分支

git merge  dev #  git merge 被合并过来的分支

image-20231125014718030

因为 V6 是从 V5 来的,V5 是从 V1 来的,所以本质 dev 分支合并到 master,最终版就是 V6

所以这里的合并操作并不会真的生成新版本,而是将 HEAD 指向 master 分支,然后 master 指向 V6

执行以下命令,查看最终合并后的版本

git log --oneline

image-20231125015028545

你以为是下面这样合并,生成新的版本 V7 (错误理解)

image-20231125201438211

实际是下面这种方式合并,并不会生成新的版本 (正确理解)

image-20231125200744285

# 13、删除 hotfix 分支

TIP

hotfix分支为临时创建的分支,用来做 bug 修复,bug 修复完,实际上我们可以不需要了(当然,你也可以保留),所以你可以把hotfix分支删除。

注意:

删除分支,不能在当前分支删除自己,只能在当前分支删除别的分支。所以,我们要删除hotfix分支,需要切换到masterdev分支来删除。

接下来,我们执行以下命令删除hotfix分支。删除分支,本质上就是删除对应的指针

git branch -d hotfix  # 删除hotfix分支

删除后,我们可以执行以下命令,来验证我们的想法

git branch # 查看所有分支,看hotfix分支是否还在
git log --oneline # 查看master分支的提交记录,可以验证你前面以合并的理解

image-20231125015749466

删除后,当前停留在 master 分支的 V6 版本处。

image-20231124234052113

# 14、切换到 dev 分支

bug 修复后,我们切换到 dev 分支继续后面的开发工作。

git switch dev

image-20231125020214446

当前 HEAD 指针指向 dev 分支,dev 分支指向 V4

image-20231124234453614

# 15、在 dev 分支上 - 生成 V7 版本

切找到dev分支后,我们继续开发,index.html内容修改成如下:

<body>
  <div class="V1">V1版本内容-master</div>
  <div class="V2">V2版本内容-dev</div>
  <div class="V3">V3版本内容-dev</div>
  <div class="V4">V4版本内容-dev</div>
  <div class="V7">V7版本内容-dev</div>
</body>

然后执行以下两条命令,生成 V7 版本。

git add .
git commit -m 'V7'

image-20231125020555775

image-20231124235120655

# 16、合并分支(dev 分支合并到 master 分支)

TIP

项目开发到 V7,我们需要把 dev 分支合并到 master 分支,发布上线。

先执行以下命令,切换到 master 分支

git switch master   # 切换到master分支

然后执行以下命令,将 dev 分支合并到 master 分支上,在合并时,V6 与 V7 会合并生成一个新的版本 V8

git merge dev  # 合并dev分支到当前分支(这里当前分支为master)

注意:

  • 以上情况 V7 和 V6 并不是一条链路上的,所以合并时会生成一个新的版本。
  • V7 与 V6 合并时可能会发生冲突。因为,我们有可能在 V6 与 V7 版本中,对项目的同一个地方做了不同的修改,导致在合并时发生冲突,不知道以那个版本中的内容为主。
  • 合并时一旦发生冲突,我们就需要先修复冲突,然后再重新执行git add命令将修改后的内容提交到暂存区,然后再执行git commit命令提交到本地仓库,生成新的版本。

本次项目中,执行以上命令将 dev 分支合并到 master 会发生冲突。此时 Git 会把冲突的文件在 VSCode 中打开,并标明发生冲突的内容,具体如下:

image-20231125022007942

手动删除index.html文件中不需要的内容,然后保存该文件。保存后,我们需要执行git add命令来将修改后的文件添加到暂存区,然后执行git commit命令提交到仓库生成新的版本 V8

git add .
git commit -m 'V8'

image-20231125022849803

以上git log --oneline命令并没有清楚的让我们看到分支的合并记录,我们可以执行以下命令以图形化的形式查看分支和分支的合并记录

git log --oneline --graph   # 以简单列表图形化形式显示分支与分支合并记录

# 按 q 退出

image-20231125023316540

image-20231125001201734

# 17、切换到 dev 分支,继续开发

TIP

将 dev 分支合并到 master 分支后,后续我们的项目又有新功能需要添加,此时我们就需要回到 dev 分支,然后接着往后开发。

或者,我们可以将 dev 分支删除,如果后期有新功能要开发,可以切换到 master 分支,在 V8 的基础上创建一个新的分支来开发新功能

以下演示的是保留 dev 分支,在 dev 分支开发后续功能

首先我们要切换到 dev 分支

git switch dev # 切换到master分支

image-20231125031348112

因为我们需要在现有项目的进度上接着开发,所以我们需要将 master 分支合并到 dev 分支

git merge master  # 合并master分支到当前分支(这里指dev)

image-20231125031513982

注意:

这里 master 合并到 dev 分支(V7 与 V8 的合并),合并后本质就是 V8,所以并不会产生新的版本,而将 HEAD 指针指向了 dev 分支,dev 分支指向 V8。

V8 和 V7 在同一个链路上(V7 是 V8 的父节点),所以这里合并分支并不会生成新的版本。

image-20231125232243073

最后,我们可以执行以下命令验证自己的想法

git log --oneline --graph

image-20231125031831408

从上图的打印可以看到,并没有生成新的版本,而是 HEAD 指针指向了 dev 分支,dev 分支当前指向 V8

# 18、总结:分支操作

TIP

总结分支常用的操作命令,推荐的分工作流、分支操作注意事项

# 18.1、分支操作常用命令

命令 说明
git branch 查看分支
git branch -v 查看分支,展示的信息多一些
git branch 分支名 在当前分支的节点上创建新的分支
git checkout 分支名 切换分支,兼容性好
git switch 分支名 切换分支,v2.23.0 版及以后可用
git branch -d 分支名 删除分支
git merge 要合并的分支名 将指定的分支合并到当前分支
git branch  # 查看所有分支
git branch -v  # 查看所有分支,列出分支更多信息
git branch dev # 创建dev分支

git switch dev # 切换到dev分支
git checkout dev  # 切换到dev分支

git branch -d hotfix # 删除hotfix分支
git merge hotfix # 将hotfix分支合并到当前分支

# 复习以下命令
git log  # 查看当前分支提交历史记录
git log --oneline  #  以一行列表方式显示提交历史记录
git log --oneline -graph #  以一行、图形化的方式显示提交历史记录
git reflog  #  可以查看所有提交记录,包括被“丢弃”的版本

# 18.2、推荐分支工作流

TIP

  • master 作为主分支,只在 master 分去上保留完全稳定的代码
  • 在 dev 分支上做开发,最终合并到 master 分支
  • 在 hotfix 分支上做紧急修复,最终合并到 master 分支
  • ...... 还可以有更多的分支,进行团队协作开发,最终开发好的代码测试没有问题,都合并到 master 分支

# 18.3、分支操作注意事项

TIP

  • 在 master 分支没有任何一次提交时,是不能创建新的分支。新分支的创建必需在某个提交版本的基础上创建。
  • HEAD 指针永远指向当前分支的当前提交
  • 在删除分支时,不能在当前分支自己删除自己。只能在当前分支删除其它分支
  • 在合并分支时,如果发生冲突,需要先解决冲突,保存修改后的文件,再令将修改的文件提交到暂存区,最后提交到本地仓库生成新的版本。
  • 在合并分支时,需要先切换到合并到的分支。比如:需要将 dev 分支合并到 master 分支,需要先切换到 master 分支,再在 master 分支执行git merge dev进行分支合并。

# 二、Git 远程仓库

TIP

本小节我们将重点学习 Git 远程仓库的使用,内容主要涉及:

  • 远程仓库简介
  • 如何创建远程仓库
  • 如何删除远程仓库
  • 如何操作仓库

在前面认识 Git 三大区域时,我们提到了远程仓库,如下图:

image-20231122200615462

我们需要把本地仓库中的代码推送到远程仓库。这样不管我们在哪里,在哪一台电脑上要开始后续的开发,我们只需要将远程仓库的代码克隆或拉取到本地,然后接着开发即可。开发好,再将本地仓库代码推送到远程仓库,使远程仓库与本地仓库代码保持一致。

有了远程仓库,我们就可以方便的展开多人协作开发,或单人异地开发。

# 1、远程仓库简介

TIP

远程仓库: 是指托管在因特网或其他网络中的你的项目的版本库。说的直白一点,就是在另一台服务器中有一块空间用来保存你的项目版本库。

下面左图表示我们电脑上的本地仓库,保存了我们项目的版本;右侧表示远程仓库,保存了我们项目的版本。

image-20231127180545639

常用的远程仓库:

  • GitHub:远程仓库服务器、代码托管理台,全球最大的同性交友网站
  • Gitee:相当于国内版的GitHub,访问速度比GitHub
  • GitLab:一个开源项目,可用于搭建自己的远程仓库。相当于你可以自己购买一台服务器,然后利用 GitLab 搭建自己的远程仓库。

注意:

上面提到的GitHubGitee远程仓库服务器,我们可以在他们上面创建远程仓库。

# 2、创建远程仓库

TIP

目前使用比较广泛的远程仓库服务器有GitHubGiteeGitee基本是模仿Github开发的,相当于是国内版的GitHub,所以两者在操作上几乎是一样的。

因为GitHub在国外,所以不使用代理是打不开了,而Gitee在国内,打开速度非常快。所以我们选择以Gitee作为教学,教大家学习如何创建远程仓库和操作远程仓库。

温馨提示:

GitHub的操作与Gitee的操作几乎一样,所以学会了Gitee,那GitHub自然也就会了,有少许额外不同的地方,大家用到了,自行研究下即可。

接下来,我们按下面的步骤在Gitee上创建一个远程仓库

①、进到Gitee 官网 (opens new window),在右上角,点击注册按扭,注册 Gitee 账号

image-20231127184240336

根据上面填写的信息,注册好的 Gitee 账号,访问https://gitee.com/qxin905地址可以进到我的 Gitee 主页

②、以上步骤注册好账号后,就可以登录 Gitee 账号,登录账号后就会进到你的个人主页。然后按下图所示,新建仓库。

image-20231127184712894

点击新建仓库,就会跳转到如下截图所在页面,然后按下图所示填写好对应信息

image-20231127185654865

以上信息填写好后,点击创建按扭,就会跳转到如下所示页面,说明仓库创建成功。

image-20231127191024411

注:

此时,仓库还是空的,什么内容也没有,所以显示了以上截图所示内容。如果仓库有内容,该页面就会显示仓库内容。

如果需要仓库有内容,我们可以在线创建内容,也可以把本地仓库的内容推送到这个 test 远程仓库。我们一般不会在线创建内容,而是选择把本地仓库的内容推送到远程仓库。

# 3、删除远程仓库

TIP

如果创建的某个仓库你确定不需要了,就可以按台下操作,将该仓库删除。

image-20231204175402370

image-20231204175432485

image-20231204175513516

# 4、操作远程仓库

TIP

本小节,我们将学习如何操作远程仓库,内容如下:

  • 推送远程仓库 ----- 如何将本地版本库推送到远程仓库
  • 添加远程仓库 ----- 如何配置远程仓库,同时为其取别名
  • 查看远程仓库 ----- 查看所有本配置的远程仓库
  • 远程仓库重命名和移除
  • 克隆远程仓库 ----- 克隆远程仓库到本地

# 5、【公司】推送到远程仓库

TIP

首先要学习的就是如何将本地仓库项目的版本推送到远程仓库

如下图:

image-20231127193052829

所以我们首先的有一个本地的版本库,然后才能将其推送到远程仓库。

# 5.1、生成本地版本库

TIP

首先新建文件夹web,然后在web根目录下执行git init命令,初始化本地仓库,利用 Git 来管理web项目。

注意:

正常情况下,本地项目文件夹的名字最好与远程仓库一致,这样方便管理。

git init

接下来,在 web 目下新建index.html文件开发项目,开发一段时间后,index.html内容如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div class="header">开发了网站头部</div>
  </body>
</html>

然后执行以下命令,生成 V1 版本

git add .
git commit -m 'V1-头部开发完成'

接着在V1版本基础上创建了dev分支,然后切换到dev分支继续开发

git branch dev
git checkout dev

开发一段时间后,index.html内容如下:

<!-- 部分内容省略 -->
<body>
  <div class="header">开发了网站头部</div>
  <div class="main">开发网站主体部分</div>
</body>

然后执行以下命令,生成 V2 版本

git add .
git commit -m 'V2-主体部份开发完成'

当前版本提交记录,如下图:

image-20231204191558528

# 5.2、推送到远程仓库

要将本地仓库对应的分支推送到远程仓库,需要用到 git push <remote> <branch> 命令

# git push 远程仓库地址  分支名   以下命令将本地的master和dev分支推送到远程仓库test
git push  https://gitee.com/qxin905/test.git master dev

如果在本地有多个分支,想要将多个分支一起推送到远程仓库,可以如下操作

#  将master 和 dev分支一起推送到远程仓库
git push   https://gitee.com/qxin905/test.git  master dev

# 将本地仓库所有分支一起推送到远程仓库
git push   https://gitee.com/qxin905/test.git --all

如果是第一次执行git push ... 将本地分支推送到远程仓库,会弹出如下图所示弹窗,要求输入 Gitee 平台的用户名和密码验证身份,身份证成功后就会推送。

后面再执行git push ...命令推送时,这台电脑就不需要再验证身份。因为 Git 会自动帮你管理身份凭证,如果你是 windows 电脑,会保存在`控制面版 -> 用户账户 -> 凭据管理器(管理 windows 凭据)-> 普通凭据中。

image-20231204180539602

注意:

如果其它人想要往这个仓库推送代码,就需要加入对该远程仓库有读写权限的团队,没有加入就没有办法推送。后面会讲到

image-20231127225912128

输入用户名和密码,点击继续,就会完成推送,具体如下图:

image-20231127230312358

这时,我们在 Gitee 平台查看 test 仓库,看到结果如下,说明推送成功。

image-20231127231559137

可以点击index.html文件查看内容,如下:

image-20231127231722814

后续我们会接着在本地开发,然后将开发好的内容推送到远程仓库。但每次推送都需要执行以下命令。

git push https://gitee.com/qxin905/test.git master

这样肯定是非常麻烦,接下来我们就来讲一个比较简单的推送方式。

# 4.3、添加远程仓库

TIP

Git 允许我们运行git romote add <shortname> <url> 命令,添加一个新的远程 Git 仓库,同时指定一个方便使用的简写。

# origin 为仓库地址别名   添加远程仓库,同时指定别名origin
git remote add origin https://gitee.com/qxin905/test.git

接下来,我们就可以在命令行中使用字符串origin来代替https://gitee.com/qxin905/test.git master 整个 URL 完成推送功能,具体如下:

git push origin master  # 将master分支推送到远程仓库test

上面命令等同于下面命令

git push https://gitee.com/qxin905/test.git master

注意:

别名只针对当前项目,如果 git 管理了很多项目,需要为每个项目配置别名。

# 4.4、查看远程仓库

TIP

如果想查看你已经配置的远程仓库信息,可以运行 git remote 命令。 它会列出你指定的每一个远程仓库的简写。

git remote  # 查看所有已配置的远程仓库信息

image-20231127233901040

你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

git remote -v

image-20231127234027619

如果你想查看某个远程仓库的更多信息,可以使用git remote show <remote>命令。

git remote show origin  # 查看远程仓库的详细信息(origin为仓库别名)

# 4.5、远程仓库的重命名与移除

TIP

如果你想修改某个远程仓库的简写名,可以使用git remote rename命令。例如:想将 origin 重名为 test,则可以执行以命令

git remote rename origin test   # 将远程仓库简写名origin 修改为 test
git remote  # 查看远程仓库

image-20231128001231040

如果因为一些原因想要移除一个远程仓库——你已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了——可以使用 git remote removegit remote rm

git remote remove test
git remote

image-20231128001305644

一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。

# 6、【家里】克隆远程仓库

TIP

假设你之前一直是在公司的电脑上开发项目,然后将其推送到远程仓库。但今天是周末,你想在 家里 继续项目的开发,但是你家里的电脑没有之前开发的项目内容,该如何继续开发呢 ?

因为你家里的电脑上目前一点项目的内容都没有,所以你需要通过git clone 命令将远程仓库代码全部克隆到本地电脑,这样本地仓库的代码就与远程保持一致了,你就可以继续开发了。

我们可以在某个目录下,执行以下命令,就可以将远程仓库代码全部克隆到本地。

git clone https://gitee.com/qxin905/test.git   # 克隆远程仓库代码到本地
# 以上命令执行后,记录执行 git checkout dev 命令切换到dev分支

以上代码执行后,将在当前目录下看到如个文件

image-20231128005238592

注意:

  • git clone命令克隆了全部代码,相当于直接把远程仓库代码拷贝一份到本地,包括.git文件夹。(也就是说我们不需要再执行git init初始化本地仓库)
  • 如果你使用 git clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 也就是执行git remote 命令时,可以看到origin

如下图

image-20231128010134673

项目克隆到本地后,我们就可以接着开发,开发完成后,index.html文件内容如下:

<!-- 部分内容省略 -->
<body>
  <div class="header">开发了网站头部</div>
  <div class="main">开发网站主体部分</div>
  <div class="footer">网站底部部分</div>
</body>

然后执行以下命令,生成一个新的版本 V3

git add .
git commit -m 'V3-网站底部开发完成'

最后,执行以下命令推送到远程仓库即可。

git push origin dev  # 将dev分支推送到远程仓库test

# 以上命令等于执行以下命令
git push https://gitee.com/qxin905/test.git  dev

接着,我们创建了b-dev分支,同时切换到b-dev分支

git branch b-dev  # 创建b-dev分支
git checkout b-dev  # 切找到b-dev分支

然后在b-dev分支上创建了login.html文件,文件内容如下:

<div class="login">用户登录页开发完成</div>

最后,执行了以下命令,生成了 V4 版本

git add .
git commit -m 'V4-开发了用户登录功能'
git push origin b-dev  # 将b-dev分支推送到远程仓库test

image-20231204194022284

# 7、【公司】从远程仓库中拉取与抓取

TIP

假设你今天上班回到公司,要继续上面项目的开发。此时你就需把远程仓库中的代码拉取到本地,使本地仓库与远程仓库代码保持同步,然后再继续开发。

注意:

此时公司电脑有本地版本库,只需要从远程仓库中拉取本地版本库中没有的那部分,然后合并到本地版本库中,并不需要把所有代码全部克隆到本地。

# 7.1、get fetch 拉取与 get merge 合并

  • 首先你可以执行git branch -r命令,查看当前项目的远程分支
git branch -r

image-20231204194932404

  • 接着拉取远程仓库dev分支和b-dev分支上的最新代码,可以使用git fetch [remote-name] [branch-name]命令。
git fetch origin dev  # 拉取远程仓库dev分支代码 (origin为远程仓库别名)

git fetch origin b-dev  # 拉取远程仓库b-dev分支代码
  • 如果想拉取远程分支中所有分支的最新代码,可以使用git fetch [remote-name]
# 如果想拉取远程分支中所有分支的最新代码,可以使用
git fetch origin
  • 可以执行git diff [local-branch] [remote-branch]命令,查看本地分支与远程分支之间的差异
git diff dev  origin/dev  # 查看本地分支dev 与 远程origin/dev分支的差异

image-20231204195512832

  • 拉取了最新代码后,可以使用git merge [branch-name]命令将远程分支合并到本地分支。
git checkout dev  # 首先要切换到dev分支
git merge origin/dev # 将远程origin/dev分支合并到dev分支

如果想删除已拉取的远程分支,可以执行git remote prune [remote-name]命令

# 7.2、get pull 拉取并合并

TIP

如果我们需要将远程分支的代码拉取到本地,并与本地的某个分支合并,可以用get pull <remote> <branch> 这个简化指令。

git pull等于先执行了git fetch 从远程仓库拉取分支,然后再执地git merge将拉取的分支与本地分支合并。

git pull origin dev  # 将远程dev分支合并到当前的dev分支,注意,需要先git checkout dev   切换到dev分支

上面的命令,等于执行了以下两条命令

git fetch origin dev
git merge origin/dev

简化命令

# 如果当前分支与远程分支存在追踪关系,git pull 会自动将远程跟踪分支拉取与当前分支合并
git pull origin
# 或
git pull
  • 为分支设置跟踪分支
git branch -u origin/dev  # 为当前分支设置跟踪分支 origin/dev

# 8、总结 - Git 远程仓库

TIP

总结 Git 远程仓库需重点掌握的内容,远程仓库操作常用命,及注意事项

# 8.1、本小节需要了解的内容

TIP

  • 什么是远程仓库 ?(见上面远程仓库简介)
  • 常用来创建远程仓库的平台有 GitHubGitee
  • GitLab是一个开源项目,可用于搭建自己的远程仓库

# 8.2、本小节需要重点掌握的内容

TIP

  • 如何创建和删除远程仓库
  • 如何将本地版本库推送到远程仓库
  • 如何添加远程仓库
  • 如何查看远程仓库
  • 远程仓库重命名与移除
  • 克隆远程仓库

# 8.3、远程仓库操作常用命令

命令 说明
git remote 查看配置的远程仓库的别名
git remote -v 查看配置的远程仓库详细信息
git remote show 远程仓库地址/仓库别名 查看配置的某个远程仓库详细信息
git remote add 别名(常用 origin) 远程仓库地址 添加远程仓库,并配置别名
git push 别名/远程仓库地址 要推送的分支或--all 推送本地版本到远程仓库
git remote rename 远程仓库原别名 远程仓库修改后别名 修改远程仓库的别名
git remot remove 远程仓库别名 移除某个远程仓库配置
git clone 远程仓库地址 克隆远程仓库到本地 (在没有本地仓库的时候,用 git clone)
git fetch 别名 远程分支名 拉取远程分支最新代码
git diff 本地分支 远程分支 对比本地分支与远程分支差异
git branch -r 查看远程分支
git pull 远程仓库地址/别名 远程分支名:本地分支名 从远程仓库拉取本地仓库没有的那部分内容,并自动与本地版本库的指定分支合并。

# 8.4、本小节注意事项

TIP

  • 别名只针对当前项目,如果 git 管理了很多项目,需要为每个项目配置别名
  • 将本地仓库推送到远程仓库是需要权限的,默认第一次推送时,需要输入远程仓库服务器平台的用户名和密码,后续再在此电脑上往此远程仓库推送代码时,就可以直接推送了。
  • 如果其它人想要往这个仓库推送代码,就需要加入对该远程仓库有读写权限的团队,没有加入就没有办法推送。

# 三、tag 标签

TIP

深入浅出 tag 标签:创建、删除、列出、共享标签 相关内容

# 1、打标签

TIP

Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(发布版本号,如:v1.0.0 等等)

接下来,我们将学习如何创建新标签、如何列出已有的标签、将标签推送至远程仓库、删除标签、以及不同类型的标签分别是什么。

# 1.1、创建标签

TIP

Git 支持两种标签:轻量标签(lightweight)与 附注标签(annotated)

轻量标签很像一个不会改变的分支——它只是某个特定提交的引用

而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。

通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签

# 1.2、附注标签

你可以运行git tag -a 标签名 -m 标签说明命令为当前分支的当前提交创建一个附注标签

git tag -a v1.0.0 -m '正式稳定版第一版'

你可以通过git show命令看到标签信息和与之对应的提交信息

git show v1.0.0   # 查看标签v1.0.0的标签信息及与之对应的提交信息

image-20231206015410199

# 1.3、轻量标签

你可以运行git tag 标签名命令为当前分支的当前提交创建一个轻量标签

git tag v1.0.1  # 创建轻量标签

你也可以通过git show命令查看标签信息,不过你不会看到额外的标签信息。 命令只会显示出提交信息:

git show v1.0.1  # 查看标签信息

image-20231206020211063

# 1.4、后期打标签

如果你忘记了在某次提交上打标签,你可以执行以下命令,为该次提交打上标签

# git tag -a 标签名  版本号 -m  标签说明
git tag -a v0.2 569801b -m 'v0.2标签说明'

# git tag 标签名  版本号
git tag v0.5 57acaf2

# 2、列出标签

在 Git 中列出已有的标签非常简单,只需要输入 git tag

git tag

image-20231206024837857

这个命令以字母顺序列出标签,但是它们显示的顺序并不重要。

你也可以按照特定的模式查找标签。 例如,Git 自身的源代码仓库包含标签的数量超过 几十个 。 如果只对 v1.0.0 系列感兴趣,可以运行:

git tag -l "v1.*"  #只列出所有v1.开头的标签

image-20231206024949965

# 3、共享标签(推送标签到远程仓库)

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行 git push origin <tagname>

git push origin v0.5  # 推送v0.5标签到远程仓库

如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

git push origin --tags  #将所有不在远程仓库服务器上的标签传到远程服务器

# 4、删除标签

要删除掉你本地仓库上的标签,可以使用命令 git tag -d <tagname>

git tag -d v0.5

注意上述命令并不会从任何远程仓库中移除这个标签,你必须用 git push <remote> :refs/tags/<tagname> 来更新你的远程仓库:

git push origin :refs/tags/v0.2

上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它

第二种更直观的删除远程标签的方式是:

git push origin --delete v0.5

# 5、总结

本小节我们需要重点掌握以下操作tag标签的方法。

命令 说明
git tag -a 标签名 -m 标签说明 为当前分支当前提交创建【附注标签】
git tag 标签名 为当前分支当前提交创建【轻量标签】
git tag 标签名 版本号 给指定提交版本创建一个【轻量标签】
git push 远程仓库别名 标签名 推送标签到远程仓库
git push 远程仓库别名 --tags 把所有不在远程仓库服务器上的标签全部传送到那里。
git tag -d 标签名 删除本地标签名
git push 远程仓库别名 --deleted 标签名 删除远程仓库标签名
git tag 查看所有标签列表
git tag -l 标签名称筛选字符串 根据标签名筛选字符串筛选符合要求的标签
git show 标签名 查看标签的信息(轻量标签和附注标签的信息是不一样的)
上次更新时间: 12/12/2023, 1:30:52 AM

大厂最新技术学习分享群

大厂最新技术学习分享群

微信扫一扫进群,获取资料

X