Git进阶使用(图文详解)

文章目录

  • Git概述
  • Git基础指令
  • Git进阶使用
    • 一、Git分支
    • 1.主干分支
    • 2.其他分支
      • 2.1创建分支
      • 2.2查看分支
        • 1. 查看本地分支
        • 2. 查看远程分支
        • 3. 查看本地和远程分支
        • 4. 显示分支的详细信息
        • 5. 查看已合并和未合并的分支
      • 2.3切换分支
        • 1. 切换到已有的本地分支
        • 2. 创建并切换到新分支
        • 3. 切换到远程分支
        • 4. 切换到上一个分支
        • 注意事项
      • 2.4删除分支
    • 二、Git合并
    • 三、Git冲突
      • 1. 创建初始仓库和文件
      • 2. 创建分支 B1 并进行修改
      • 3. 创建分支 B2 并进行修改
      • 4. 合并 B2 到 master 分支 (预期无冲突)
      • 5. 合并 B1 到 master 分支 (预期有冲突)
      • 6. 解决冲突
      • 7. 标记冲突已解决并完成合并
      • 8. 查看合并结果


Git概述

Git基础指令

Git进阶使用

一、Git分支

  • 在 Git 中,分支允许你在同一个代码库中同时进行不同的工作,而不会相互干扰。

  • 每个分支都代表了代码库的一个独立线索,可以用来开发新功能、修复 bug、修改配置文件等,而不会影响其他分支的内容。

  • 使用分支可以很好地解决环境配置文件不同的问题。

  • 可以创建不同的分支来管理本地环境和服务器环境的配置文件,这样就可以根据需要在不同的分支上进行修改,而不必担心冲突或混淆。

  • 分支感觉上就是树上的分叉一样,会按照不同的路线生长下去。有可能以后不再相交,当然,也可能以后会不断地纠缠下去,都是有可能的。
    在这里插入图片描述

1.主干分支

  • 默认情况下,Git 仓库在初始化时会创建一个名为master的分支,这是 Git 的默认主分支。
    在这里插入图片描述

  • 这个分支通常被认为是代码库的主干,所有稳定和经过测试的代码通常都会合并到这个分支。

  • 所有的操作如果不显式地切换到其他分支,都会在这个默认分支上进行。

需要注意的是,近年来 Git 和许多软件项目开始将默认分支名称从 master 改为 main,以避免可能的歧义和历史包袱。如果你使用较新的 Git 版本或某些托管服务(如 GitHub),初始化仓库时默认分支名称可能是 main 而不是 master。

2.其他分支

如果仅仅是一个分支,在某些情况并不能满足实际的需求,那么就需要创建多个不同的分支。

2.1创建分支

  • git branch 分支名称
git branch b1
git branch b2

现在我们创建了2个分支,不过这两个分支都是基于master主干分支为基础的。
在这里插入图片描述

2.2查看分支

1. 查看本地分支

要查看当前仓库中的所有本地分支,可以使用以下命令:

git branch

这个命令会列出所有本地分支,并且会用 * 标记当前所在的分支。

$ git branch
* master
  feature-branch
  bugfix-branch

在这里插入图片描述

在这个输出中,master 是当前所在的分支。

2. 查看远程分支

如果你想查看远程仓库中的所有分支,可以使用以下命令:

git branch -r

这个命令会列出所有远程分支。

$ git branch -r
  origin/HEAD -> origin/main
  origin/main
  origin/feature-branch
  origin/bugfix-branch

这里 origin 是默认的远程仓库名称,可以看到远程仓库中的分支列表。

3. 查看本地和远程分支

同时查看本地和远程的所有分支,可以使用以下命令:

git branch -a

这个命令会列出本地和远程的所有分支。例如:

$ git branch -a
* master
  feature-branch
  bugfix-branch
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/feature-branch
  remotes/origin/bugfix-branch

在这个输出中,本地分支和远程分支会分别列出,其中远程分支前面带有 remotes/ 前缀。

4. 显示分支的详细信息

如果你想查看分支的更多详细信息,比如每个分支的最后一次提交,可以使用以下命令:

git branch -v

这个命令会列出每个分支的名称及其最近的一次提交信息。

$ git branch -v
* master          a1b2c3d Initial commit
  feature-branch  d4e5f6g Added new feature
  bugfix-branch   g7h8i9j Fixed a bug

在这里插入图片描述

5. 查看已合并和未合并的分支
  • 查看已经合并到当前分支的所有分支.

    git branch --merged
    
  • 查看尚未合并到当前分支的所有分支。

    git branch --no-merged
    

2.3切换分支

1. 切换到已有的本地分支

要切换到一个已经存在的本地分支,可以使用以下命令:

git checkout <branch-name>

将工作线路切换到b1

# git checkout 分支名称
git checkout b1

在这里插入图片描述

添加新的文件b1.txt,然后提交到版本库。
在这里插入图片描述
在这里插入图片描述

查看分支信息,会发现不同分支的版本进度信息发生了改变

在这里插入图片描述
此时切换回到主干分支的话,那么b1.txt文件就不存在了,因为对应版本信息不一样。

在这里插入图片描述
在这里插入图片描述

2. 创建并切换到新分支

创建一个新的分支并立即切换到该分支

git checkout -b <new-branch-name>

在这里插入图片描述

3. 切换到远程分支

远程分支是位于远程仓库中的分支,切换到一个还没有在本地存在但在远程仓库中存在的分支,需要先将其拉取到本地,然后再切换。

  1. 使用 git fetch 命令更新远程仓库信息:

    git fetch
    
  2. 使用以下命令创建一个新的本地分支并追踪相应的远程分支:

    git checkout -b <new-branch-name> origin/<remote-branch-name>
    

创建并切换到一个名为 remote-feature 的远程分支

git checkout -b remote-feature origin/remote-feature
4. 切换到上一个分支

Git 提供了一种方便的方法来快速切换回你之前的分支,可以使用 - 选项:

git checkout -

这个命令会切换到你上一次所在的分支。例如,如果你从 master 分支切换到 feature-branch 分支,然后想要快速切换回 master 分支,可以简单地执行:

在这里插入图片描述

注意事项
  1. 未提交的更改:在切换分支前,确保你在当前分支上的未提交更改不会丢失。你可以通过以下方式处理:

    • 提交未提交的更改。

    • 将未提交的更改暂存到 stash 中:

      git stash
      

    然后在新分支上恢复:

    git stash apply
    
  2. 冲突:如果你在切换分支时遇到冲突,Git 会提示你解决冲突。你需要手动解决冲突并提交解决冲突后的结果。


2.4删除分支

某一个分支建立的不太理想或已经没有必要在使用了,那么是可以将这个分支删除的。

git branch -d 分支名称

在这里插入图片描述

在这里插入图片描述


二、Git合并

  • 在软件开发中,通常会创建多个分支来同时进行不同的工作,比如修复 bug、开发新功能、进行实验性的工作等等。每个分支都代表了一个特定的工作环境和目标。

  • 然而,最终目标是将这些分支合并到主要的代码库中,形成项目的最终结果。这通常通过合并分支或者重新基于最新代码进行开发来实现。

在这里插入图片描述

将b3分支的文件内容合并到主干分支中。

首先先切换回主干分支
在这里插入图片描述
在这里插入图片描述

创建b3分支,并直接切换到新的分支

在这里插入图片描述
在这里插入图片描述

在新的分支中添加新文件b3.txt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时切换回主干分支,只有yushifu.txt文件。

在这里插入图片描述

我们将b3分支的文件内容合并到主干分支中。

首先先切换回主干分支
在这里插入图片描述

执行分支合并指令

# git merge 分支名称
git merge new_branch

在这里插入图片描述
此时再次查看文件,就会发现b3.txt文件已经可以看到了。


三、Git冲突

  • 在多分支并行处理时,每一个分支可能是基于不同版本的主干分支创建的。
  • 如果每隔分支都独立运行而不进行合并,就没有问题,但是如果在后续操作过程中进行合并的话,就有可能产生冲突。
  • 比如B1, B2的两个分支都是基于master分支创建出来的。B1分支如果和B2分支修改了同一份文件的话,那么在合并时,以哪一个文件为准呢,这就是所谓的冲突。

在这里插入图片描述

可以通过一个具体的例子来展示如何处理 Git 合并冲突。

假设我们有一个 README.md 文件,并且我们有两个分支 B1B2,它们都是基于 master 分支创建的。在这些分支中,我们对 README.md 进行了不同的修改。

1. 创建初始仓库和文件

# 初始化一个新的Git仓库
git init example-repo
cd example-repo

# 创建 README.md 文件
echo "This is the master branch" > README.md

# 添加并提交
git add README.md
git commit -m "Initial commit on master"

2. 创建分支 B1 并进行修改

# 创建 B1 分支
git checkout -b B1

# 修改 README.md 文件
echo "Change made in B1 branch" >> README.md

# 添加并提交
git add README.md
git commit -m "Update README.md in B1"

3. 创建分支 B2 并进行修改

# 切换回 master 分支
git checkout master

# 创建 B2 分支
git checkout -b B2

# 修改 README.md 文件
echo "Change made in B2 branch" >> README.md

# 添加并提交
git add README.md
git commit -m "Update README.md in B2"

4. 合并 B2 到 master 分支 (预期无冲突)

# 切换回 master 分支
git checkout master

# 合并 B2 分支
git merge B2
# 没有冲突,合并成功

5. 合并 B1 到 master 分支 (预期有冲突)

# 合并 B1 分支
git merge B1
# 这时会产生冲突,因为 README.md 文件在 B1 和 B2 分支中都被修改了

在这里插入图片描述

6. 解决冲突

现在我们查看 README.md 文件,会看到如下内容:

This is the master branch
<<<<<<< HEAD
Change made in B2 branch
=======
Change made in B1 branch
>>>>>>> B1

在这里插入图片描述

这里的冲突,软件是无法判断该如何出来处理的,所以需要人工进行判断,将冲突的文件内容进行修正。

假设我们希望保留两处修改,可以将文件编辑成如下内容:

This is the master branch
Change made in B2 branch
Change made in B1 branch

7. 标记冲突已解决并完成合并

# 标记 README.md 为已解决
git add README.md

# 完成合并
git commit -m "Merge B1 branch and resolve conflict"

8. 查看合并结果

现在查看 README.md 文件,确认合并后的内容:

This is the master branch
Change made in B2 branch
Change made in B1 branch

在这里插入图片描述


本文仅供学习使用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/706667.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

毕业年薪20w起!25届最近5年南京信息工程大学自动化考研院校分析

南京信息工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近4年考研分数情况 四、近4年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、…

掌握WhoisAPI,提升域名管理的效率

在互联网时代&#xff0c;域名管理是网站运营中非常重要的一环。通过域名&#xff0c;我们能够轻松访问和识别不同的网站。然而&#xff0c;域名的注册和管理也是一项复杂的任务&#xff0c;特别是对于大规模拥有许多域名的企业来说。为了提升域名管理的效率&#xff0c;我们可…

边缘计算网关在智慧厕所远程监测与管理的应用

随着智慧城市建设的不断深入&#xff0c;城市公共设施的智慧化管理成为了提升城市品质和居民生活质量的关键建设。公厕作为城市基础设施的重要组成部分&#xff0c;其管理效率和卫生状况直接影响着市民的日常生活体验。在公厕设施建设背景下&#xff0c;边缘计算网关技术的应用…

ansible离线安装docker

docker简介&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。这个容器可以在任何支持Docker的机器上运行&#xff0c;确保了应用在不同环境中的一致性。 网上有很多在线ansible安装docker的&…

Base64编码方式的介绍及其编码解码

一、Base64是什么 Base64是一种用于将二进制数据编码为ASCII字符的编码方式&#xff0c;主要目的是为了能够在文本环境中传输和存储二进制数据。这种编码方式广泛应用于电子邮件、HTTP协议和其他需要传输或存储二进制数据的地方。 二、发明Base64编码的原因 Base64编码的发明解…

猫狗识别(超详细版)(py代码)

猫狗识别&#xff08;一&#xff09; 二、视频识别 用OpenCV和Tkinter构建的视频识别猫狗的应用程序。它允许用户从文件对话框中选择一个视频文件&#xff0c;然后在Tkinter窗口中播放视频&#xff0c;并使用Haar级联分类器实时检测视频中的猫和狗。 1.导入所需的库&#xff…

QT--DAY1

不使用图形化界面实现一个登陆界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle("登录界面");//设置窗口大小this->resize(535,410);//固定窗口大小this->setFixedSize(535,410)…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟&#xff0c;全国各地的消费者通过网络在线上购物的频率越来越高&#xff0c;为此&#xff0c;多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台&#xff0c;开设自己的店铺。 图片来源&#xff1a;unspl…

MAVEN-SNAPSHOT和RELEASE

一、快照版本SNAPSHOT和发布版本RELEASE区别 快照版本SNAPSHOT和发布版本RELEASE区别-CSDN博客 在使⽤maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能⼀天就要发布⼀次&#xff0c;遇到bug时&am…

网络编程(三)UDP TFTP协议

文章目录 一、 UDP&#xff08;一&#xff09;概述&#xff08;二&#xff09;流程 二、收发函数&#xff08;一&#xff09;recvfrom&#xff08;二&#xff09;sendto 三、实现一个简单的udp服务端和客户端四、实现tftp客户端协议 一、 UDP &#xff08;一&#xff09;概述 …

vue 中多个表单元素控一个校验规则

1. 场景一 <el-form-itemlabel"确认时长方式"prop"preSubResourceDurationDay" ><div class"confirmDurationDay">最晚使用日期前<el-input-numberv-model"form.preSubResourceDurationDay":precision"0"cla…

为什么需要负样本

假如我们只有正样本&#xff0c;模型在最开始训练的时候都是错误的&#xff0c;随着模型的迭代&#xff0c;准确率逐渐从0到1&#xff0c;最终将所有的样本都判别成正样本&#xff0c;也就是都在线的上方。 但真实的场景中有正有负&#xff0c;例如我们要做一个猫狗分类器&…

jsp 实验20

三、源代码以及执行结果截图&#xff1a; NewFile.jsp <% page import "java.io.*" %> <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> <jsp:useBean id"english" class "web.Engli…

nginx配置https协议(测试环境)

第一步申请证书 首先申请证书这一步&#xff0c;晚上有很多种方式实现&#xff0c;可以自己用算法实现&#xff0c;也可以找在线生成的网站&#xff0c;我这里使用了在线网站 https://www.toolhelper.cn/SSL/SSLGenerate 第二步将证书放到对应的目录下 这里我们主要用cert.pe…

基于JSP技术的大学生校园兼职系统

开头语 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;可以通过文末的联系方式找到我。 开发语言 JSP 数据库 MySQL 技术 JSP JavaBeans 工具 MyEclipse、Tomcat、Navicat 系统展示 首页 学生登录界面 招聘信息界面 论坛中心界面 摘…

028、工具_Pipeline

Redis客户端执行一条命令分为如下四个过程: 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间)。 Pipeline(它能将一组Redis命令进 行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端,图3-…

2.6-5V/2.5A升9V12V18V方案 升压恒压IC 低功耗小家电芯片-H6391惠海

H6391升压恒压IC是一款适用于多种小家电和电子设备的电源管理升压恒压芯片。其设计特点有低功耗、高效率以及灵活配置等方面&#xff0c;以下是针对其特性的详细分析&#xff1a; 宽输入电压范围&#xff1a;H6391支持2.6-5V的输入电压范围&#xff0c;这使得它适合于由单节锂电…

【六】Linux安装部署Nginx web服务器--及编写服务器启动脚本

一、部署安装nginx 1、查看nginx是否安装依赖包 [rootlocalhost ~]# rpm -q zlib-devel pcre-devel package zlib-devel is not installed package pcre-devel is not installed 2、若没有则安装nginx 依赖包 [rootlocalhost ~]# yum -y install zlib-devel* pcre-dev…

线上3d数字艺术展让您在市场竞争中更具优势

在传统电商中&#xff0c;高昂的引流成本和激烈的行业竞争让获客变得尤为困难。随着web3技术的发展和覆盖&#xff0c;产品交互3D数字云展厅融合先进的web3D开发技术&#xff0c;构建了一个沉浸式数字空间&#xff0c;让客户随时随地通过电子设备进入展厅&#xff0c;享受自由浏…

vue 生命周期 钩子函数 keep-alive activated deactivated

一、activated deactivated 在被keep-alive包含的组件/路由中&#xff0c;会多出两个生命周期的钩子:activated 与 deactivated。在 2.2.0 及其更高版本中&#xff0c;activated 和 deactivated 将会在树内的所有嵌套组件中触发。activated在组件第一次渲染时会被调用&#x…