Git进阶使用(图文详解)

文章目录

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

Git概述

Git基础指令

Git进阶使用

一、Git分支

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

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

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

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

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

1.主干分支

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

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

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

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

2.其他分支

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

2.1创建分支

  • git branch 分支名称
bash 复制代码
git branch b1
git branch b2

现在我们创建了2个分支,不过这两个分支都是基于master主干分支为基础的。

2.2查看分支

1. 查看本地分支

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

sh 复制代码
git branch

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

sh 复制代码
$ git branch
* master
  feature-branch
  bugfix-branch

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

2. 查看远程分支

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

sh 复制代码
git branch -r

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

sh 复制代码
$ git branch -r
  origin/HEAD -> origin/main
  origin/main
  origin/feature-branch
  origin/bugfix-branch

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

3. 查看本地和远程分支

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

sh 复制代码
git branch -a

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

sh 复制代码
$ 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. 显示分支的详细信息

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

sh 复制代码
git branch -v

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

sh 复制代码
$ git branch -v
* master          a1b2c3d Initial commit
  feature-branch  d4e5f6g Added new feature
  bugfix-branch   g7h8i9j Fixed a bug
5. 查看已合并和未合并的分支
  • 查看已经合并到当前分支的所有分支.

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

    sh 复制代码
    git branch --no-merged

2.3切换分支

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

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

sh 复制代码
git checkout <branch-name>

将工作线路切换到b1

bash 复制代码
# git checkout 分支名称
git checkout b1

添加新的文件b1.txt,然后提交到版本库。

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

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


2. 创建并切换到新分支

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

sh 复制代码
git checkout -b <new-branch-name>
3. 切换到远程分支

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

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

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

    sh 复制代码
    git checkout -b <new-branch-name> origin/<remote-branch-name>

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

sh 复制代码
git checkout -b remote-feature origin/remote-feature
4. 切换到上一个分支

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

sh 复制代码
git checkout -

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

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

    • 提交未提交的更改。

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

      sh 复制代码
      git stash

    然后在新分支上恢复:

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


2.4删除分支

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

bash 复制代码
git branch -d 分支名称

二、Git合并

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

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

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

首先先切换回主干分支

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


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



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

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

首先先切换回主干分支

执行分支合并指令

bash 复制代码
# git merge 分支名称
git merge new_branch

此时再次查看文件,就会发现b3.txt文件已经可以看到了。


三、Git冲突

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

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

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

1. 创建初始仓库和文件

bash 复制代码
# 初始化一个新的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 并进行修改

bash 复制代码
# 创建 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 并进行修改

bash 复制代码
# 切换回 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 分支 (预期无冲突)

bash 复制代码
# 切换回 master 分支
git checkout master

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

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

bash 复制代码
# 合并 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

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

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

markdown 复制代码
This is the master branch
Change made in B2 branch
Change made in B1 branch

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

bash 复制代码
# 标记 README.md 为已解决
git add README.md

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

8. 查看合并结果

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

markdown 复制代码
This is the master branch
Change made in B2 branch
Change made in B1 branch

本文仅供学习使用!

相关推荐
李狗蛋儿啊1 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
人工干智能4 小时前
科普:“git“与“github“
git·github
{⌐■_■}16 小时前
【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别
大数据·git·elasticsearch
GardenTu18 小时前
初尝git自结命令大全与需要理解的地方记录
git·github
真就死难1 天前
Git是什么
git
机械心1 天前
代码管理git详细使用教程及最佳实践路径
git
hkj88081 天前
Git 常用命令
git
dawnkylin2 天前
通过 fork 为项目做出贡献
git·github
1379003402 天前
Git 设置代理
git
xiaodunmeng2 天前
sourcetree gitee 详细使用
git