GitLab教程(四):分支(branch)和合并(merge)

文章目录

1.分支(branch)

(1)分支的概念

Git的分支(Branch)是Git版本控制系统中的一个核心概念,它允许你创建代码的多个并行版本,从而使得团队成员可以在不影响主开发线路的情况下进行功能开发、错误修复或实验性尝试。以下是关于Git分支的一些关键点:

  • 为什么使用分支?
  1. 隔离开发 :分支允许开发者在不影响主分支(如mastermain)的情况下工作,这样就可以安全地进行新功能的添加或错误的修复。
  2. 并行开发:团队成员可以同时在不同的分支上工作,提高开发效率。
  3. 易于管理:通过为每个任务或特性创建独立的分支,可以清晰地组织和追踪工作进度。
  4. 风险降低:在分支上进行的实验性修改如果失败,不会影响到稳定代码,降低了引入错误的风险。
  • 分支策略:
  1. 特性分支:为每个新功能创建一个分支,完成开发并测试通过后合并回主线。
  2. Bug修复分支:针对发现的bug创建专门的分支进行修复,修复完成后合并到相关分支。
  3. 发布分支:准备发布时,从主分支创建一个发布分支进行最终测试和调整,确保不影响正在进行的开发工作。
  4. 主分支(main/master):保持稳定,只接受已测试和审查过的代码合并。

(2)branch命令

  • git branch查看当前所处分支:

  • git branch xx分支名创建一个新分支:

  • git checkout xx分支名切换到目标分支:
  • git checkout -b xx分支名创建并切换分支(相当于合并了上两条命令):
  • git branch -d xx分支名删除目标分支:

注意:不能删除当前的分支

2.合并(merge)

(1)三个命令pull=fetch+merge

在Git中,pullfetchmerge 是三个非常重要的命令,它们帮助你与远程仓库同步代码。下面是这三个命令的解释和用法:

git fetch

git fetch 命令用于从远程仓库下载最新的分支和标签数据到本地仓库,但不会自动合并到你当前的工作分支。这个过程不会改变你当前的工作副本,只是让你能够查看远程仓库中的最新状态。

命令格式如下:

bash 复制代码
git fetch [remote]

其中,[remote] 是你想要获取更新的远程仓库名称,默认是 origin

git merge

git merge 命令用于将一个或多个分支的修改合并到当前分支。当你已经通过 git fetch 获取了远程分支的最新变化,或者当你想要合并本地的一个分支到当前分支时,就会用到这个命令。

命令格式:

bash 复制代码
git merge [branch]

这里的 [branch] 是你想要合并进来的分支名。

git pull

git pull 是一个复合命令,它实际上执行了 git fetch 和随后的 git merge 操作。也就是说,git pull 不仅会从远程仓库获取最新的数据,还会自动尝试将获取到的分支合并到你当前所在的本地分支上。

命令格式:

bash 复制代码
git pull [remote] [branch]

如果不指定 [branch],默认会尝试合并远程分支到当前分支。同样,如果没有指定 [remote],则默认为 origin

(2)合并冲突

当执行 merge 命令进行合并时,Git具备一定的智能自动化处理能力:如果一个分支仅修改了文件A,而另一个分支独立地修改了文件B,Git能够无缝整合这些更改,自动完成合并过程------即最终的代码既包含了对A文件的修改也包含了对B文件的修改。同样地,若两个分支虽然都修改了同一个文件,但涉及的是文件中互不重叠的部分,比如一个改动发生在第一行,另一个则在第二行,Git同样能巧妙地自动合并这些非冲突性修改。

然而,当两个分支修改了同一文件的相同部分时,merge操作就会遇到挑战,这时Git的自动合并算法无法确定应该采用哪个分支的修改。这种情况下,Git会标记这些区域为"冲突"(Conflict)。遭遇冲突时,Git会暂停合并过程,并在冲突文件中明确标记出争议区域,同时留下标记指示哪些是来自不同分支的修改内容。此时,就需要开发者介入,手动检查这些冲突,决定如何解决分歧,保留或结合双方的修改,以达到期望的合并结果。

解决方法一:解决冲突

  • 修改发生冲突的代码部分:

可以看到,Git 虽然没有帮你完成自动 merge,但它对文件还是做了一些工作:它把两个分支冲突的内容放在了一起,并用符号标记出了它们的边界以及它们的出处。上面图中表示,HEAD 中的内容是 code 222,而 refs/remotes/origin/main 中的内容则是 code 111。这两个改动 Git 不知道应该怎样合并,于是把它们放在一起,由你来决定。假设你决定保留 HEAD 的修改,那么只要删除掉 refs/remotes/origin/main 的修改,再把 Git 添加的那三行 <<< === >>> 辅助文字也删掉,保存文件退出,所谓的「解决掉冲突」就完成了。

  • 执行git add和git commit提交修改:

解决方法二:放弃merge

执行git merge --abort让Git 仓库回到 merge 前的状态。

相关推荐
小哈龙27 分钟前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
GISer_Jing10 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
高山莫衣16 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁16 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_16 小时前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记16 小时前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码1 天前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码1 天前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github
大卫小东(Sheldon)1 天前
GIM 1.5发布了! 支持Windows系统了
git·ai·rust
flying jiang1 天前
将大仓库拆分为多个小仓库
git