热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Git技巧:安全撤销特定合并提交

近期在公司项目中遇到Git合并操作引发的一系列问题,导致开发进度受阻。本文将详细探讨如何在不影响后续提交的前提下,安全撤销特定的合并提交。
背景介绍

在过去几天里,我们在使用Git进行代码合并时遇到了一些棘手的问题,这些问题不仅影响了我们的开发效率,还浪费了大量的时间。具体来说,我们的项目中存在一个dev测试分支和多个独立的开发分支。不幸的是,在一次未经协调的操作中,有人将dev分支合并到了其中一个开发分支中。直到代码准备发布时,这个问题才被发现。如下图所示:

Git 技巧:安全撤销特定合并提交

由于此错误发生在多次提交之后,因此需要一种方法来撤销这次合并,同时保留后续的其他提交。

解决方案一:使用revert撤销合并提交

尝试直接使用git revert命令撤销合并提交时,可能会遇到如下错误:

git revert 100047dcc
error: Commit 100047dccb58f3ee5e27b0dfaf5c02ac91dc2c73 is a merge but no -m option was given.
fatal: revert failed

这个错误提示是因为100047dcc是一个合并提交,而没有指定-m选项来指明要撤销的父提交。正确的做法是使用-m选项,例如:

git revert 100047dcc -m 1

这里的-m 1表示选择第一个父提交作为基准。接下来,您可能需要解决代码冲突,确保主分支的更改得以保留,而错误的合并更改被移除。

解决方案二:使用rebase交互式重写历史

另一种方法是通过交互式rebase来删除特定的提交。具体步骤如下:

  1. 使用git log查看提交记录,找到需要撤销的提交的commit_id
  2. 运行git rebase -i commit_id,这将打开一个文本编辑器显示一系列提交。
  3. 将需要删除的提交前的pick改为drop
  4. 保存并关闭编辑器,Git会自动重写历史。
解决方案三:使用cherry-pick恢复特定提交

如果您希望保留某些特定的提交而不影响整体历史,可以使用cherry-pick命令。步骤如下:

  1. 使用git reset --hard 1d7444回退到错误提交之前的版本。
  2. 使用git cherry-pick 626335将特定的提交应用到当前分支。
  3. 使用git push origin HEAD --force强制推送更改。

以上三种方法各有优缺点,选择哪种方法取决于您的具体需求和项目环境。希望这些技巧能帮助您更有效地管理代码仓库。


推荐阅读
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • 本文档介绍了在使用GitLab进行数据仓库项目开发时,如何管理和维护代码版本,包括非标准gitflow工作流下的分支结构及其权限设置,以及git commit message的规范。 ... [详细]
  • 手动将 Webpack 2.x 迁移到最新版 Webpack 4.8.3(当前 GitHub 最新版本)
    手动webpack2.x升级到webpack4.8.3(当前github最新版本)一直使用的webpack是2.3.3版本作为生产环境使用,看了react-create- ... [详细]
  • 使用GitHubDesktop上传本地的项目文件注册账号下载安装啥的就都省略了,直接进入正题点击左上角的“+”号,选择“Add”项,点击“choose ... [详细]
  • 本文介绍了GitHub上的一些Python开源项目,特别是IM(即时通讯)技术的应用。通过Sealtalk项目,探讨了如何利用开源SDK提升开发效率。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 修正我的GitHub commit 数据
    早晨上班,滴滴搭车里,我在掘金这个帖子看到大家晒自己的Github活跃记录,我也晒了下自己的记录。不过太少了。有遗漏的commits状况这也让我知道,自己觉得自己很忙的,实际上提交 ... [详细]
  • 如何成为一位「不那么差」的程序员
    前言已经记不清有多少读者问过:博主,你是怎么学习的?像我这样的情况有啥好的建议嘛?也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。因此也 ... [详细]
  • 我尝试从GitHub安装软件包,并且在R中使用了以下代码:install.packages("de ... [详细]
  • 解决dockermachine 初始化下载 book2docker 过慢的问题
    docker运行docker-machinecreate命令第一次启动会去github.com下载一个最新的boot2docker.iso镜像。国内下载会很慢,有时会卡死。如图:解 ... [详细]
  • 注册一个GitHub用户的过程
    今天,我注册了一个GitHub用户。一开始,不知道GitHub是什么,还以为叫什么getup,心里还想着什么网站名字这么奇怪,后来在舍友的帮助之下知道了原来是叫GitHub.下面是我的注册过程: ... [详细]
  • ios原生骨架库,网络过渡动画封装
    最新版2.0.5,release版本目录关于TABAnimated实现原理优点演变过程效果图安装使用Cocoapods手动导入使用步骤扩展回调Tips属性相关强调最后关于TABAn ... [详细]
  • 六、PCA主成分分析(降维)github地址:https:github.comlawlite19MachineLearning_Python全部代码1、用处数据压缩(Data ... [详细]
author-avatar
水平蓝精灵天堂_678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有