我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Gitlab中如何优雅的拉取和合并代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Gitlab中如何优雅的拉取和合并代码

本文小编为大家详细介绍“Gitlab中如何优雅的拉取和合并代码”,内容详细,步骤清晰,细节处理妥当,希望这篇“Gitlab中如何优雅的拉取和合并代码”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

pull or fetch

拉取代码的操作有两种形式,git pullgit fetch,那么这两种有什么区别呢?

让我们先来看看一个架构图

Gitlab中如何优雅的拉取和合并代码

图中展示一个完整的git流程,为了更清晰的了解每个区域,我们下来解释一下他们的功能:

  • 工作区(working directory), 简言之就是你工作的区域。对于git而言,就是的本地工作目录。

  • 暂存区(stage area, 又称为索引区index), 是把修改提交版本库前的一个过渡阶段。在工作目录下.git的目录里面有个index文件,存储着关于暂存区的内容。git add命令将工作区内容添加到暂存区。

  • 本地仓库(local repository), 版本控制系统的仓库,存在于本地。当执行git commit命令后,会将暂存区内容提交到仓库之中。.git/objects目录中存放了每一个提交的记录,而在.git/refs目录下存放的是分支信息和tag信息。

  • 远程版本库(remote repository), 与本地仓库概念基本一致,不同之处在于一个存在远程,可用于远程协作,一个却是存在于本地。通过push/pull可实现本地与远程的交互;

  • 远程仓库副本, 可以理解为存在于本地的远程仓库缓存。当使用git fetch拉取远程代码仓库的时候,就相当于在本地有一个远程仓库的副本,你可以选择把这个副本合并到本地仓库中。

从图中可以看出来,当我们使用git pull拉取代码的时候,是直接合并到了本地分支,而使用git fetch拉取代码的时候,会先在本地生成一个远程仓库的副本,然后使用git merge或者git rebase合并到本地分支。

既然能直接git pull何必多次一举呢?试想一个场景,当你想合并别人的代码,又不知道人家改了什么东西,是否能够跟你代码合并到一起,这时候通过git fetch就能很轻易的实现。git fetch以后实际并不会立马跟本地分支立马合并,在git fetch以后,会显示如下图:

Gitlab中如何优雅的拉取和合并代码

上图显示了远程新增了一个test2分支,在test分支上多了个一个提交信息,这时候在.git/refs/remotes/origin目录下可以看到多了一个test2分支。

使用git log origin/test,可以查看具体的提交信息

Gitlab中如何优雅的拉取和合并代码

如果想查看提交的内容是啥,只能通过新建一个分支,

git checkout -b test-origingit merge test

讲到这里,相信你已经明白了git pullgit fetch的区别了吧。总结一下:

  • git fetch 更安全,更人性化

  • git pull 更激进,破坏性更强

一般的Leader在管理项目的时候都是习惯性的使用git fetch查看最近新增了哪些分支,做了哪些修改,从而对项目做出更好的把控。

merge or rebase

上面提到的合并操作,一般我们直接是通过git merge <分支名>去合并某个分支的代码。先看看直接使用git merge的问题,有一条看着很不顺眼的Merge branch信息,如下图所示:

Gitlab中如何优雅的拉取和合并代码

下图是合并后的一个流程图,当我们在main分支拉一个dev进行开发,这时候两个分支都有提交记录,当我们合并的时候,正常情况应该是在main的基础上,直接合并,而不是多了一个C7的提交信息,也就是上面提到的Merge branch,这显然是一个很不合理的现象(当然这也不影响git正常工作)。

Gitlab中如何优雅的拉取和合并代码

那如何解决这个现象导致的问题呢?答案就是git rebase,俗称变基。

下面我们先来看看变基以后git分支是什么样的了

Gitlab中如何优雅的拉取和合并代码

可以看到,当dev分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。

示例操作

上面讲了这么多,现在让我们来实际操作一下。

场景:远程有一个main分支上有内容更新,现在我们需要把更新的内容合并到本地dev分支上,然后push到远程dev分支,当前分支实在dev分支。

简单实现(就是很朴实无华):

# 拉取main分支代码git fetch origin main# 合并到devgit rebase origin/main

上面的git rebase还有个快捷的操作,直接一行命令搞定

# 拉取test分支代码合并到devgit pull --rebase origin test

如果你不想每次都添加rebase,可以在终端中输入下面的命令:

git config --global pull.rebase true

这个配置就是告诉git在每次pull前先进行rebase操作

其他命令参考

# 查看本地分支git branch# 查看远程分支git branch -r# 查看所有分支git branch -a# 拉取所有远程分支代码git fetch # 拉取origin源上所有分支代码git fetch origin# 拉取orign源上main分支代码git fetch origin main# 拉取远程分支到新建的一个本地分支并git checkout -b newBrach origin/master# 合并远程分支到本地git pull --rebase origin master# 查看提交日志git log --oneline# 查看某个人提交的日志git log --author=xiumubai --oneline# 查看某个文件提交的记录git blame README.md# 查看某次提交的内容git show <commitid># 查看最近几次的提交git log -p -n

读到这里,这篇“Gitlab中如何优雅的拉取和合并代码”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Gitlab中如何优雅的拉取和合并代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Gitlab中如何优雅的拉取和合并代码

本文小编为大家详细介绍“Gitlab中如何优雅的拉取和合并代码”,内容详细,步骤清晰,细节处理妥当,希望这篇“Gitlab中如何优雅的拉取和合并代码”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。pull or f
2023-07-05

如何将GitLab上的代码拉取到本地

GitLab是一个面向团队的Git仓库管理工具,它为开发者提供了一种简单高效的方式来协作开发代码。无论是个人还是团队开发,GitLab都能够满足各种需求。在GitLab上开发代码完成后,我们需要将代码拉取到本地进行测试,然后再进行提交。本文
2023-10-22

如何在GitLab中进行代码审查和合并请求

如何在GitLab中进行代码审查和合并请求代码审查是一个重要的开发实践,可以帮助团队发现潜在的问题并改善代码质量。在GitLab中,通过合并请求(Merge Request)功能,我们可以方便地进行代码审查和合并工作。本文将介绍如何在Git
2023-10-22

python中如何优雅的合并两个字典

这篇文章给大家分享的是有关python中如何优雅的合并两个字典的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如何优雅的合并两个字典** 操作符可以解包字典,这在合并字典时非常有用,比如:>>> x = {a: 1
2023-06-27

如何在GitLab中管理项目的代码重构和优化

如何在GitLab中管理项目的代码重构和优化随着软件开发的不断演进,代码重构和优化成为了保证项目质量和性能的重要环节之一。在GitLab这样的代码托管平台上,我们可以高效而有序地管理项目的代码重构和优化。本文将介绍如何利用GitLab的功能
2023-10-24

PHP开发中如何优化代码复杂度和耦合度

在PHP开发中,代码的复杂度和耦合度是我们需要关注和优化的重要问题。高复杂度的代码往往难以理解和维护,而高耦合度的代码则会增加修改和扩展的困难。下面将介绍一些常用的技术和方法来优化代码的复杂度和耦合度,并提供一些具体的代码示例。使用设计模式
2023-10-21

PHP的获取器和修改器:如何优化代码的读取和修改功能

PHP的获取器和修改器:如何优化代码的读取和修改功能在面向对象编程中,获取器(getter)和修改器(setter)是很常见的概念,特别是在PHP中。它们允许我们规范化对类属性的访问,增加代码的可维护性和灵活性。在本文中,我们将探讨如何使用
PHP的获取器和修改器:如何优化代码的读取和修改功能
2023-12-23

什么是接口?如何在PHP中使用接口编写优雅的代码?

什么是接口?如何在PHP中使用接口?本篇文章带大家聊聊使用接口编写更优雅的 PHP 代码,希望对大家有所帮助!在编程中,确保代码可读、可维护、可扩展和易于测试是很重要的;而使用接口,恰恰是我们改进代码中所有这些因素的方法之一。目标读者本文的目标读者是对 OOP(面向对象编程)概念有基本了解并在 PHP 中使用继承的开发人员。如果你知道如何在 PHP 代码中使用继承,那么你应该可以很好地理解本文。什么
2022-08-08

如何解决Go语言中的并发任务的优雅停机和平滑重启问题?

如何解决Go语言中的并发任务的优雅停机和平滑重启问题?在Go语言中,我们经常会遇到需要处理并发任务的情况。然而,并发任务的停机和重启可能会造成资源泄漏或数据丢失等问题。为了解决这些问题,我们需要采用一些优雅的停机和平滑重启的方法。一、优雅停
2023-10-22

如何使用GitHub关注他人并获取有价值的代码和信息

GitHub是全球最大的代码托管平台之一,它不仅可以方便地管理和分享代码,还可以通过关注其他开发者,获取最新的技术资讯和有价值的代码,是每一个程序员必备的工具之一。本文将详细介绍如何使用GitHub关注他人并获取有价值的代码和信息。一、创建
2023-10-22

如何优化PHP开发中的代码重用和模块化

作为一种广泛应用的编程语言,PHP常用于开发Web应用和网站。在PHP开发过程中,代码的重用和模块化是提高开发效率和代码可维护性的重要因素。本文将介绍如何优化PHP开发中的代码重用和模块化,并给出具体的代码示例。一、使用函数封装可复用代码块
2023-10-21

如何优化PHP开发中的代码结构和模块化

PHP作为一种广泛应用于Web开发的脚本语言,其灵活性和易用性造就了大量的PHP应用程序。然而,随着项目规模的增加和复杂性的提高,开发人员需要更加关注代码结构和模块化,以提高代码的可读性、可维护性和可扩展性。在本文中,我将介绍一些优化PHP
2023-10-21

PHP7中新增的null合并运算符:如何简化代码的逻辑判断?

PHP7 中新增了一个很实用的运算符:null 合并运算符(null coalescing operator)。这个运算符可以用来简化代码中的逻辑判断,使代码更加简洁易读。传统的逻辑判断通常使用三元运算符或者 if-else 语句来实现。比
2023-10-24

PHP7中新增的空合并运算符:如何简化代码的判空操作?

PHP7中新增的空合并运算符:如何简化代码的判空操作?在开发PHP应用程序时,经常会遇到需要判空的情况,例如获取用户输入的表单数据、从数据库查询结果中获取数据等等。以前的写法往往需要使用三元运算符或isset()函数来进行判断,代码看起来冗
2023-10-25

如何优化PHP开发中的代码安全性和可靠性

随着网络和信息技术的快速发展,PHP作为一种广泛应用于Web开发的程序语言,被越来越多的开发人员所采用。然而,由于PHP的开放性,使得其在安全性和可靠性方面容易受到攻击和漏洞的影响。为了保证PHP代码的安全性和可靠性,开发人员需要采取一些措
2023-10-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录