【随笔】Git 高级篇 -- 远程与本地不一致导致提交冲突 git push --rebase(三十一)

本文主要是介绍【随笔】Git 高级篇 -- 远程与本地不一致导致提交冲突 git push --rebase(三十一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请添加图片描述

  • 💌 所属专栏:【Git】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述

文章目录

  • 前言
  • 一、远程与本地不一致导致提交冲突
      • 1、介绍
      • 2、示范
        • (1)提交冲突拉取失败
        • (2)fetch 更新本地分支提交
        • (3)merge 更新本地分支合并提交
        • (4)pull --rebase更新本地分支提交
        • (5)pull 更新本地分支合并提交
      • 3、实战
        • (1)第一种方法
        • (2)第二种方法
  • 总结


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【Git】专栏的第三十一篇文章;
  这是今天学习到Git 高级篇 – 远程与本地不一致导致提交冲突 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【Git】 , 此专栏是我是夜阑的狗对Git,Gitee等工具使用过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


一、远程与本地不一致导致提交冲突

  这里给大家推荐一个好用的 Git在线练习地址。在这练习网站里面也有自己的教程,就让我们一步一步跟着教程学习吧,记录下自己的所感所悟。前面已经简单的学习了模拟团队合成场景,接下来就让我们看看在实际项目过程中是怎么对远程仓库提交本地记录的吧。话不多说,让我们原文再续,书接上回吧。

请添加图片描述

1、介绍

  现在我们已经知道了如何从其它地方 pull 提交记录,以及如何 push 我们自己的变更。看起来似乎没什么难度,但是为何还会让人们如此困惑呢?困难来自于远程库提交历史的偏离。在讨论这个问题的细节前,我们先来看一个例子……
  假设你周一克隆了一个仓库,然后开始研发某个新功能。到周五时,你新功能开发测试完毕,可以发布了。但是 —— 天啊!你的同事这周写了一堆代码,还改了许多你的功能中使用的 API,这些变动会导致你新开发的功能变得不可用。但是他们已经将那些提交推送到远程仓库了,因此你的工作就变成了基于项目旧版的代码,与远程仓库最新的代码不匹配了。
  这种情况下,git push 就不知道该如何操作了。如果你执行 git push,Git 应该让远程仓库回到星期一那天的状态吗?还是直接在新代码的基础上添加你的代码,亦或由于你的提交已经过时而直接忽略你的提交?
  因为这情况(历史偏离)有许多的不确定性,Git 是不会允许你 push 变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。

2、示范

  让我们来看看都有哪些解决方法吧。

(1)提交冲突拉取失败

  说了这么多,咱们还是看看实际案例吧!

在这里插入图片描述

git push

  看见了吧?什么都没有变,因为命令失败了!git push 失败是因为你最新提交的 C3 基于远程分支中的 C1。而远程仓库中该分支已经更新到 C2 了,所以 Git 拒绝了你的推送请求。运行结果如下图所示:

在这里插入图片描述

(2)fetch 更新本地分支提交

  那该如何解决这个问题呢?很简单,你需要做的就是使你的工作基于最新的远程分支。有许多方法做到这一点呢,不过最直接的方法就是通过 rebase调整你的工作。咱们继续,看看怎么 rebase 吧!
  如果我们在 push 之前做 rebase 呢?

git fetch
git rebase o/main
git push

  我们用 git fetch 更新了本地仓库中的远程分支,然后用 rebase 将我们的工作移动到最新的提交记录下,最后再用 git push 推送到远程仓库。运行结果如下图所示:

请添加图片描述

(3)merge 更新本地分支合并提交

  还有其它的方法可以在远程仓库变更了以后更新我的工作吗? 当然有,我们还可以使用 merge。尽管 git merge 不会移动你的工作(它会创建新的合并提交),但是它会告诉 Git 你已经合并了远程仓库的所有变更。这是因为远程分支现在是你本地分支的祖先,也就是说你的提交已经包含了远程分支的所有变化。
  看下演示,咱们们用 merge 替换 rebase 来试一下……

git fetch
git merge o/main
git push

  我们用 git fetch 更新了本地仓库中的远程分支,然后合并了新变更到我们的本地分支(为了包含远程仓库的变更),最后我们用 git push 把工作推送到远程仓库。这里需要注意的是在实际项目过程中,如果本地分支和远程分支存在冲突,是停留在 git merge 阶段的,需要手动解冲突才能进行后续的步骤。运行结果如下图所示:

请添加图片描述

(4)pull --rebase更新本地分支提交

  很好!但是要敲那么多命令,有没有更简单一点的?当然 —— 前面已经介绍过 git pull 就是 fetchmerge 的简写,类似的 git pull --rebase 就是 fetchrebase 的简写!这种方法也是本人最喜欢用的。
  让我们看看简写命令是如何工作的。这次用 --rebase 参数……

git pull --rebase
git push

  跟之前结果一样,但是命令更短了。运行结果如下图所示:

请添加图片描述

(5)pull 更新本地分支合并提交

  换用常规的 pull这里需要注意的是在实际项目过程中,如果本地分支和远程分支存在冲突,是停留在 git merge 阶段的,需要手动解冲突才能进行后续的步骤,所以 git pull 会提示有冲突拉取失败。

git pull
git push

  还是跟以前一样!运行结果如下图所示:

请添加图片描述

  由 fetchrebase/mergepush 组成的工作流很普遍。后续课程我们会讲解更复杂的工作流,不过现在我们先解决这个关卡吧。
  要完成本关,你需要完成以下几步:

  • Step 1、克隆你的仓库;
  • Step 2、模拟一次远程提交(fakeTeamwork);
  • Step 3、完成一次本地提交;
  • Step 4、用 rebase 发布你的工作;

3、实战

  从前面了解到具体的实现的步骤,就可以开始实战啦。这里先给大家说一下这个练习网站的一些使用技巧,

  • help 指令

  执行这个命令后就会有个帮助信息的弹窗。

在这里插入图片描述

  • levels 指令

  执行完这个命令之后就能看到关卡目录了。

在这里插入图片描述

  • 目标

在这里插入图片描述

  • 开始结构

在这里插入图片描述

(1)第一种方法

  在实际项目过程中,我们可以直接使用 pull 指令的 rebase 参数来合并冲突,接下来就让我们来看看是怎么操作的吧。

  • Step 1、克隆仓库

  首先将远程仓库克隆到本地。

git clone

  很简单吧,运行结果如下图所示:

在这里插入图片描述

  • Step 2、模拟远程提交

  模拟远程分支提交记录,这里相当于远程仓库别的同事也进行了提交。

git fakeTeamework main

  运行结果如下图所示:

在这里插入图片描述

  • Step 3、本地提交

  模拟远程提交之后,我们就可以在本地分支上提交。

git commit

  运行结果如下图所示:

在这里插入图片描述

  • Step 4、更新本地分支

  这里是最关键的一步,拉取远程分支数据并以 rebase 的方式合并到本地分支中,实际项目过程中可能还需要解一下冲突。

git pull --rebase

  运行结果如下图所示:

请添加图片描述

  • Step 5、推送至远程分支

  本地分支与远程分支保持同步之后,就可以将本地的修改点上传至远程分支了。

git push

  运行结果如下图所示:

请添加图片描述

(2)第二种方法

  除了第一种方法之外,当然也可以 fetchrebase 的组合来进行解决,接下来就让我们来看看是怎么操作的吧。

  • Step 1、克隆仓库

  首先我们先把远程仓库克隆下来。

git clone

  运行结果如下图所示:

在这里插入图片描述

  • Step 2、模拟远程提交

  模拟远程分支提交记录,这里相当于远程仓库别的同事也进行了提交。

git fakeTeamwork main

  运行结果如下图所示:

在这里插入图片描述

  • Step 3、本地提交

  模拟远程提交之后,我们就可以在本地分支上提交。

git commit

  运行结果如下图所示:

在这里插入图片描述

  • Step 4、拉取远程数据

  将远程分支的数据拉取到本地分支,但这里注意的是该数据没有合并到本地分支,只是提前下载好而已。

git fetch

  很简单吧!运行结果如下图所示:

请添加图片描述

  • Step 5、合并分支

  这里是最关键的一步,拉取远程分支数据并以 rebase 的方式合并到本地分支中,实际项目过程中可能还需要解一下冲突。

git rebase o/main mian

  很简单吧!运行结果如下图所示:

请添加图片描述

  • Step 6、上传

  本地分支与远程分支保持同步之后,就可以将本地的修改点上传至远程分支了。

git push

  很简单吧!运行结果如下图所示:

在这里插入图片描述

  达成目标之后就会有成功的提示。

在这里插入图片描述


总结

  感谢观看,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】
  • 🌼 【鸿蒙系统】
  • 👑 【Python脚本笔记】
  • 🚝 【Java Web项目构建过程】
  • 💛 【微信小程序开发教程】
  • 【JavaScript随手笔记】
  • 🤩 【大数据学习笔记(华为云)】
  • 🦄 【程序错误解决方法(建议收藏)】
  • 🚀 【软件安装教程】



订阅更多,你们将会看到更多的优质内容!!

这篇关于【随笔】Git 高级篇 -- 远程与本地不一致导致提交冲突 git push --rebase(三十一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912015

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J