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
* masterfeature-branchbugfix-branch

在这里插入图片描述

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

2. 查看远程分支

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

git branch -r

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

$ git branch -rorigin/HEAD -> origin/mainorigin/mainorigin/feature-branchorigin/bugfix-branch

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

3. 查看本地和远程分支

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

git branch -a

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

$ git branch -a
* masterfeature-branchbugfix-branchremotes/origin/HEAD -> origin/mainremotes/origin/mainremotes/origin/feature-branchremotes/origin/bugfix-branch

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

4. 显示分支的详细信息

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

git branch -v

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

$ git branch -v
* master          a1b2c3d Initial commitfeature-branch  d4e5f6g Added new featurebugfix-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

在这里插入图片描述


本文仅供学习使用!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SkiaSharp绘图03】SKPaint详解(一)BlendMode混合模式、ColorFilter颜色滤镜

文章目录 SKPaintSKPaint属性BlendMode获取或设置混合模式SKBlendMode 枚举成员效果预览 Color/ColorF获取或设置前景色ColorFilter 颜色滤镜CreateBlendMode 混合模式CreateColorMatrix 颜色转换CreateCompose 组合滤镜CreateHighContrast 高对比度滤镜CreateLighting 照明滤镜…

flask实战之模板实现公共导航

基础实现 目标 在Flask中&#xff0c;使用模板继承和块&#xff08;blocks&#xff09;可以方便地提取公共导航菜单&#xff0c;使得您可以在多个页面上重用相同的导航结构。以下是一个基本示例&#xff0c;展示如何创建一个包含公共导航菜单的模板&#xff1a; 创建基础模板…

译译交友项目介绍

一、 项目背景 随着社会的进步&#xff0c;英语作为一种国际语言&#xff0c;很多人都在学习英语&#xff0c;然而现在很多人都会因为学习英语而烦恼&#xff0c;有时还会因为是一个人学习而感到枯燥。面对情绪的低落&#xff0c;往往会使学习更困难。因此&#xff0c;我打造了…

游戏心理学Day13

游戏成瘾 成瘾的概念来自于药物依赖&#xff0c;表现为为了感受药物带来的精神效应&#xff0c;或是为了避免由于断药所引起的不适和强迫性&#xff0c;连续定期使用该药的 行为现在成瘾除了药物成瘾外&#xff0c;还包括行为成瘾。成瘾的核心特征是不知道成瘾的概念来自于药…

MySQL系列-语法说明以及基本操作(二)

1、MySQL数据表的约束 1.1、MySQL主键 “主键&#xff08;PRIMARY KEY&#xff09;”的完整称呼是“主键约束”。 MySQL 主键约束是一个列或者列的组合&#xff0c;其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键&#xff0c;通过它可以强制表的实体完整性。 …

编程基础知识读后感怎么写:深入剖析与全面解读

编程基础知识读后感怎么写&#xff1a;深入剖析与全面解读 在阅读完编程基础知识相关书籍或资料后&#xff0c;撰写一篇高质量的读后感是巩固所学、深化理解的重要方式。然而&#xff0c;如何写出一篇既有深度又有广度的读后感&#xff0c;却是一个让许多人感到困惑的问题。本…

微信小程序开发教程

尚硅谷微信小程序开发教程&#xff0c;2024最新版微信小程序项目实战&#xff01; 一、小程序基础 1. 初始小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 使用小程序时 不需要下载&#xff0c;用户 扫一扫 或 搜一下 即可打开应用&#xff0c;它也体现了 “用…

【ARM Cache 及 MMU 系列文章 6.4 -- ARMv8/v9 如何读取 Cache Tag 及分析其数据?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…

未来的5-10年,哪些行业可能会被AI代替?

在未来的5-10年&#xff0c;多个行业可能会受到AI技术的影响&#xff0c;其中一些工作可能会被AI所代替。以下是对可能被AI替代的行业及工作的一些概述&#xff1a; 客户服务与代表&#xff1a;随着AI技术的发展&#xff0c;特别是自动话术对话和语音生成技术的进步&#xff0…

快捷键专栏 IDEA、Navicat、电脑、Excle、Word等

标题 电脑篇windowsR 配合以下常用命令连上公司网线WiFi速度变慢问题解决Windows10 设置鼠标右键在此处打开cmd和Powershell窗口、关机打开电脑诊断工具系统设置常用设置查看电脑出场日期 systeminfo删除文件显示已在另一个程序打开&#xff1f;找回回收站删除的文件WindowsR输…

Mocha Pro 2024 v11.0.1 Mac版摄像机反求跟踪插件更新:优化AE/PR/OFX/达芬奇工作流程

更新Mac苹果版&#xff0c;原生支持Intel和Apple M芯片&#xff0c;安装很简单。Mocha Pro 是一款世界知名的软件和插件&#xff0c;用于平面运动跟踪、3D 跟踪、动态观察、对象移除、图像稳定和PowerMesh有机扭曲跟踪。得益于集成SynthEyes核心3D跟踪算法的强大功能&#xff0…

linux为什么不是实时操作系统

Linux为什么不是实时操作系统&#xff1f; 从我们接触Linux系统开始&#xff0c;一直听到的都是它是非实时操作系统&#xff0c;怎么理解这个非实时呢&#xff1f; 我的理解&#xff0c;非实时&#xff0c;就是中断响应不及时&#xff0c;任务调度不及时。那么&#xff0c;真…

【数组】【双指针】三数之和

打算冲一把算法类比赛&#xff0c;之前一直对算法提不起兴趣&#xff0c;也有我自己对它的抵触&#xff0c;本身算法也比较菜。 但现在打算勤勤恳恳刷题&#xff0c;踏踏实实总结&#xff0c;冲&#xff01; 数组——双指针 三数之和 该题力扣网址 错误做法 三重循环框架&a…

互联网+智慧运维管理平台建设方案

互联网智慧运维管理平台建设方案 随着信息技术的飞速发展&#xff0c;互联网与各行各业的深度融合已经成为大势所趋。在运维管理领域&#xff0c;传统的运维模式已经无法满足日益复杂的业务需求和技术环境。为了提升运维效率、降低运维成本、保障系统稳定运行&#xff0c;构建…

Adobe Illustrator (AI)小技巧总结

AI2024(64bit) Adobe Illustrator 软件安装包下载地址&#xff1a; 百度网盘下载https://pan.baidu.com/s/1C10-2JVN1rxFF5VFRuV2Yw?pwdSIMS 1.效果-扭曲与变换-变换&#xff0c;两个图形组合&#xff08;CtrlG&#xff09;中心点在中间 例&#xff1a;角度7.5副本24半圆48格…

【轮询负载均衡规则算法设计题】

一、题目描述 给定n台主机&#xff08;编号1~n&#xff09;和某批数据包&#xff0c;数据包格式为&#xff08;抵达主机时刻&#xff0c;负载量&#xff09;。这里数据每个时刻最多只有1条数据到达。负载量表示该主机处理此数据包总耗时。请计算轮询负载均衡规则下&#xff0c…

云平台关键技术 | 使用异步框架 celery 后台执行linux命令的实例

准备工作 (1) 环境 J1 server, CentOS7.9$ which gcc /home/wangjl/soft/gcc-12.3.0/bin/gcc$ which python3 /home/wangjl/soft/python3/python-3.10.14/bin/python3$ gcc --version gcc (GCC) 12.3.0 Copyright (C) 2022 Free Software Foundation, Inc.$ python3 -V Pytho…

计算机msvcp100.dll丢失怎么办,分享5种亲测有效的解决方法

电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是电脑提示缺失msvcp100.dll。这个问题可能会让我们感到困惑和烦恼&#xff0c;但是只要我们了解其原因并采取相应的解决方法&#xff0…

oracle 自动优化SYS_AUTO_SQL_TUNING_TASK操作

1、查询SYS_AUTO_SQL_TUNING_TASK在执行什么任务 select execution_name,status,execution_start,execution_end from dba_advisor_executions where task_nameSYS_AUTO_SQL_TUNING_TASK order by execution_start desc; select * from DBA_ADVISOR_SQLSTATS where execution_n…

数据仓库学习之hbase-2.2.7分布式搭建

hbase-2.2.7分布式搭建 1、上传解压配置环境变量 # 1、解压 tar -xvf hbase-2.2.7-bin.tar.gz.gz# 2、配置环境变量 vim /etc/profile# 3、在最后增加配置 export HBASE_HOME/usr/local/soft/hbase-2.2.7 export PATH$PATH:$HBASE_HOME/bin# 4、使环境变量剩下 source /etc/p…