【idea】idea 中 git 分支多个提交合并一个提交到新的分支

news/2024/11/14 6:14:07/

一、方法原理讲解

我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作,

  • commit:命令用于将你的代码变更保存到本地代码仓库中,它创建了一个新的提交(commit)记录,记录了代码的变更内容以及相关的提交信息(如作者、时间、提交说明等)。
  • push:命令用于将本地仓库中的代码推送(上传)到远程代码仓库,将你的代码变更分享给其他开发者或者备份到远程服务器。
  • cherry pick:命令用于从一个分支中选择性地合并某个提交(commit)到当前分支,它允许你只合并需要的提交而不是整个分支的变更。
  • squash: 用于将多个连续的提交(commit)合并成一个提交,以便清理历史记录或整理提交信息。这个操作通常用于将多个相关的小提交合并成一个更有意义和完整性的大提交,以提高代码库的可读性和维护性。

从上面四个操作,要将A分支的多个提交合并一个提交到新的分支。我们得出两个方法,

  • 方法一:先把A分支已经提交的使用 squash 合并成一个commit,然后 push 到A远程,然后从A远程直接 cherrypick 这一个分支到B分支。
  • 方法二:先把A分支已经提交push到A远程,然后 cherrypick 到B分支本地进行 commit ,再将多个提交使用 squash 合并成一个提交 push 给B远程。

二、对多个提交合并到一个提交 squash

在这里插入图片描述

步骤2.1、选中最先提交的一个记录,右键选择 “Interactively Rebase from Here”

在这里插入图片描述会出现下面的窗口,有多个 action 方式,分别表示以下含义:

  • pickgit会应用这个补丁,以同样的提交信息(commit message)保存提交
  • rewordgit会应用这个补丁,但需要重新编辑提交信息
  • editgit会应用这个补丁,但会因为amending而终止
  • squashgit会应用这个补丁,但会与之前的提交合并
  • fixupgit会应用这个补丁,但会丢掉提交日志
  • execgit会在shell中运行这个命令

步骤2.2、我们想要选择与之前的提交合并,因此我们选择 squash

在这里插入图片描述
第一个选择 squash 是会报错,因为不能与前面的合并。因此第一个我们还是选择 pick
在这里插入图片描述

步骤2.3、会让我们重新整理提交的备注。

在这里插入图片描述
然后我们就多了一个合并后的新的提交记录
在这里插入图片描述

三、挑选代码到新分支 cherrypick

我们演示以下把代码从 dev 分支选到 test 分支。

步骤3.1、使用 checkout 把代码切到 test

因为 cherrypick 命令是将分支提交挑选到当前分支,因此要先切换到test分支。
在这里插入图片描述

git__cherrypick__35">步骤3.2、idea 的 git 取消 cherrypick 自动推送远程

取消选择 file -》setting -》git -》Commit automatically on cherry-pick

在这里插入图片描述

步骤3.3、选中一个要转移的提交,右键选择 cherrypick

这里一定要注意提交记录的分支选择正确,要从 dev 挑选到 test,因此 branch 选择 dev,这里dev也分本地 local 和远程 origin。确认清楚这个提交在本地还是远程。
在这里插入图片描述

四、最后多个提交合并后 push 到远程

在这里插入图片描述
结果验证,日志中的分支选择 origin-》test,可以看到只有一条记录。
在这里插入图片描述


http://www.ppmy.cn/news/1443572.html

相关文章

大数据Storm组件介绍

Storm 是一个开源的、分布式的实时计算系统,最初由Twitter开发并开源。它被设计用来处理大规模的实时数据流,并且具有高吞吐量、低延迟的特点。Storm 提供了一个简单而强大的编程模型,使得开发者可以轻松地编写复杂的实时数据处理应用。 以下…

Pandas——DataFrame对象用法

一、创建pandas的DataFrame对象 Pandas学习笔记二——创建pandas的DataFrame对象的3种方法 二、访问 Pandas DataFrame 中的元素 Python笔记:访问 Pandas DataFrame 中的元素 三、获取Dataframe的行数和列数 如何获取Dataframe的行数和列数 四、交换行 Panda…

《21天学通C++》实现继承(1)

1.派生语法 语法如下&#xff1a; class Base{};class Name:access-specifier Base{//access-specifier可以是public、private、protect};一个简单的继承结构程序&#xff1a; #include <iostream> using namespace std; // 定义一个基类Fish class Fish { public:bo…

LoggerFactory is not a Logback

错误信息 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from file:/D:/maven/repository/org/slf4j/slf4j-simple/1.7.26/slf…

Metasploit 溢出 samba 提权漏洞

一、信息收集 1.1 右键单击桌面&#xff0c;选择 Open Terminal Here &#xff0c;打开终端。 1.2 输入命令 nmap -sS -p 139,445 -A 192.168.1.254 ,对目标主机进行扫描,发现 139、445 端口开放。 1.3 输入命令“msfconsole”&#xff0c;启动 MSF 终端。 1.4 输入命令“searc…

webpack 入口和出口的最佳实践

入口和出口的最佳实践 {ignore} 具体情况具体分析 下面是一些经典场景 一个页面一个JS 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 源码结构 |—— src|—— pageA 页面A的代码目录|—— index.js 页面A的启动模块|—— ...|—— pageB 页面…

linux-系统安全与应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 二、Linux中的PAM安全认证 1.PAM简介 2.PAM认证原理 3.PAM的配置文件 三、使用sudo提权 四、使用别名进行授权 五、开关机安全控制 1.GRUB限制 2 禁止普通用户登录…

OceanBase开发者大会实录-杨传辉:携手开发者打造一体化数据库

本文来自2024 OceanBase开发者大会&#xff0c;OceanBase CTO 杨传辉的演讲实录—《携手开发者打造一体化数据库》。完整视频回看&#xff0c;请点击这里&#xff1e;> 各位 OceanBase 的开发者&#xff0c;大家上午好&#xff01;今天非常高兴能够在上海与大家再次相聚&…