企业标准网上备案网站,云服务器建设网站用什么系统,苏州网站建设布局,公司网站被百度转码了#x1f48c; 所属专栏#xff1a;【Git】 #x1f600; 作 者#xff1a;我是夜阑的狗#x1f436; #x1f680; 个人简介#xff1a;一个正在努力学技术的CV工程师#xff0c;专注基础和实战分享 #xff0c;欢迎咨询#xff01; #x1f496; 欢迎大… 所属专栏【Git】 作 者我是夜阑的狗 个人简介一个正在努力学技术的CV工程师专注基础和实战分享 欢迎咨询 欢迎大家这里是CSDN我总结知识的地方喜欢的话请三连有问题请私信 您的点赞、关注、收藏、评论是对我最大的激励和支持 文章目录 前言一、介绍二、问题背景三、模拟场景1、开始结构2、克隆仓库3、本地提交4、撤销提交 四、解决方案1、方案一Step 1、回退撤销改动Step 2、撤销改动Step 3、修改 C2 改动再提交Step 4、合并 C3Step 5、提交至远程 2、方案二Step 1、merge 合并 C3Step 2、提交至远程 总结 前言 大家好又见面了我是夜阑的狗本文是专栏【Git】专栏的第43篇文章; 今天又是学习 Git 实战篇 的一天总结在使用 Git 过程中遇到的问题 开启新的征程记录最美好的时刻每天进步一点点。 专栏地址【Git】 此专栏是我是夜阑的狗对GitGitee等工具使用过程的总结希望能够加深自己的印象以及帮助到其他的小伙伴。 如果文章有什么需要改进的地方还请大佬不吝赐教。 一、介绍 这里给大家推荐一个好用的 Git在线练习地址。在这练习网站里面也有自己的教程可以一步一步跟着教程学习吧记录下自己的所感所悟。 从题目中不难看出今天我们的主角就是 git reset。在 Git 的日常使用中git reset 指令用于将HEAD指向的当前分支位置重置为指定的提交并可选择性地更新暂存区域和工作目录。这个命令通常用于撤销之前的提交或者重置当前分支到一个特定的状态。然而不当的使用或复杂的合并场景下git reset 操作有时会遇到需要回退该操作的方式简而言之就是 reset 内容不满足开发者需求让开发者头疼不已。接下来就让我们看看在实际项目过程中 git reset 的时候想要回退该操作的时候是怎么解决的吧。话不多说让我们开启新的征程吧。 Let’s GO GO GO \font 二、问题背景 今天跟同事遇到 git 提交的一个问题本地分支 commit 提交两次发现第一次提交那里有一些地方忘记修改了需要回退第一笔提交但是想保留第二提交不动。然后他使用 git reset HEAD^ 就只把一笔改动给回退。此时需要把状态还原回去重新尝试于是我让同事打 git reset --abort这里我学艺不精就没咋记住那个回退命令 回退一下同事就是执行 git reset --abort 然后就没有然后因为这个命令压根就不存在纯粹是我记混了哈哈哈哈哈。没办法只能用 git 模拟出他的场景利用可视化界面来帮我们理清一下思路。
三、模拟场景 首先来到我们的 Git 练习场地进来可以发现就只有一个本地分支所以我们需要一步一步来模拟出他的错误场景。
1、开始结构 接下来就让我们来看看是怎么操作的吧。
2、克隆仓库 首先我们先把远程仓库克隆下来。
git clone很简单吧运行结果如下图所示
3、本地提交 在本地分支上提交l两次这里先提交在 fakeTeamwork 也是可以的。
git commit
git commit很简单吧运行结果如下图所示 4、撤销提交 在本地分支上进行两次 commit 提交。
git reset HEAD^很简单吧运行结果如下图所示 到这里基本上已经把问题场景复现出来了。
四、解决方案 通过前面的步骤已经把问题场景可视化出来了我们可以看到想要把当前状态回退到 C5 状态。这里通过查阅 git reset 的命令 注意一下从了 【随笔】Git – 高级命令上篇六 了解到 git reset 回退的参数是 --hrad而不是 --abort。谨记啊看来我还得在多精进精进。
1、方案一
Step 1、回退撤销改动 将前面撤销改动回退到指定状态将HEAD指向的当前分支位置重置为指定的提交同时将暂存区域和工作目录都重置为指定提交的状态。
git reset --hard C5运行结果如下图所示 注意一下这里 --hard 参数是属于硬重置不保留修改的文件恢复到最近一次提交的状态。想要指定提交之后的修改移除暂存区但保留在工作目录中就需要 git reset --mixed 了。 我们也可以发现 git 练习网站是不支持 git reset --mixed 的所以想要验证的话只能真正的 git 仓库了。
Step 2、撤销改动 通过多次尝试发现想要只回退第二笔保留第一笔改动不动的情况貌似有点不知道怎么实现当然有知道的大佬也可以在评论区告诉我哈或者我知道了也会第一时间更新的这里我就随意操作一下哈。
git reset HEAD~2运行结果如下图所示 Step 3、修改 C2 改动再提交 当我们撤销两笔改动后需要将 C2 提交点补齐之前忘记修改的部分然后再次提交。
git commit运行结果如下图所示 Step 4、合并 C3 此时 C4 就是我们修改 C2 后的结果接下来就只要把 C3 合并进来就可以了。这里用 git cherry-pick 命令来指定合入对应的提交点即可。
git cherry-pick C3运行结果如下图所示 注意一下这里是不推荐用 rebase 来合并 C3因为 rebase 会把一整条分支合并进来所以 C2 也会跟着合并进来显然不符合我们的要求。可以来看一下 rebase 是怎么跑的
git rebase main C3运行结果如下图所示 Step 5、提交至远程 最后将处理好的 commit 提交至远程仓库即可。
git push运行结果如下图所示 Oh yeah圆满解决实际上同事也按这个方法顺利解决问题。
2、方案二 当然不止上面这一种解决方法这里提供另外一种方法我们可以不用 cherry-pick方式合入对应的分支而是通过 merge 方式来合入分支。前面步骤这里就省略了直接来到合并环节。
Step 1、merge 合并 C3
git merge C3运行结果如下图所示 Step 2、提交至远程 最后将处理好的 commit 提交至远程仓库即可。
git push运行结果如下图所示 这里两种方法都能解决该问题区别在于第一种方法远程仓库上不会产生多余提交是一条干净的 commit而第二种方法则会在远程仓库上将本地分支的合并操作也一并合进来。一些开发人员喜欢保留提交历史因此更偏爱 merge。而其他人比如我自己可能更喜欢干净的提交树于是偏爱 rebase。仁者见仁智者见智。 当然知道更便捷方法的大佬也可以在评论区告诉我哈。 总结 感谢观看如果觉得有帮助请给文章点个赞吧让更多的人看到。 也欢迎你关注我。 原创不易还希望各位大佬支持一下你们的点赞、收藏和留言对我真的很重要 最后本文仍有许多不足之处欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正下期再见。 更多专栏订阅: 【LeetCode题解持续更新中】 【恒玄BES】 【鸿蒙系统】 【蓝牙协议栈】 【死机分析】 【Python脚本笔记】 【Java Web项目构建过程】 【微信小程序开发教程】 ⚽ 【JavaScript随手笔记】 【大数据学习笔记华为云】 【程序错误解决方法建议收藏】 【Git 学习笔记】 【软件安装教程】 订阅更多你们将会看到更多的优质内容