Git Rebase vs Merge:操作实例详解

news/2024/11/30 20:01:56/

        在Git版本控制系统中,git rebase 和 git merge 是两种常用的命令,用于整合不同分支上的工作。本文将通过具体的操作实例来详细解释这两个命令的区别、使用场景,以及它们对历史记录的影响。

一、git merge 示例

假设我们有一个 main 分支和一个 feature 分支,现在要将 feature 分支上的更改合并到 main 分支。

1. 准备工作

首先,确保你在 main 分支上:

git checkout main

2. 执行合并

执行以下命令来合并 feature 分支:

git merge feature

3. 解决冲突

如果合并过程中出现冲突,Git 会暂停合并操作,并告诉你哪些文件有冲突。以下是解决冲突的步骤:

# 查看哪些文件有冲突
git status# 编辑文件解决冲突
# ...# 标记冲突已解决
git add <冲突文件路径># 继续合并操作
git commit -m "解决合并冲突"

合并完成后,你的历史记录将包含一个合并提交,展示了 feature 分支合并到 main 分支的痕迹。

二、git rebase 示例

现在,我们使用 git rebase 来整合 feature 分支上的更改。

1. 准备工作

确保你在 feature 分支上:

git checkout feature

2. 执行变基

执行以下命令将 feature 分支变基到 main 分支:

git rebase main

3. 解决冲突

如果在变基过程中出现冲突,你需要解决冲突并继续变基:

# 查看哪些文件有冲突
git status# 编辑文件解决冲突
# ...# 标记冲突已解决
git add <冲突文件路径># 继续变基操作
git rebase --continue

如果你决定取消变基操作,可以使用以下命令:

git rebase --abort

变基完成后,feature 分支的历史将看起来像是直接在 main 分支上开发的。

三、修改提交信息

在变基过程中,你可以修改提交信息:

# 启动交互式变基
git rebase -i main# 在编辑器中,将 'pick' 改为 'edit' 对应你想要修改的提交
# 保存并关闭编辑器# Git 会停止在第一个标记为 'edit' 的提交
# 修改提交信息
git commit --amend# 当你完成修改后,继续变基过程
git rebase --continue

四、总结

  • git merge 保留了分支合并的历史,适合多人协作的项目。
  • git rebase 创建了一个更线性的历史,适合个人开发分支的更新。

在使用 rebase 时,应该只在私有分支上操作,以避免对项目历史造成混乱。


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

相关文章

ORACLE之DBA常用数据库查询

数据库信息 数据库概要select a.name "DB Name", e.global_name "Global Name", c.host_name "Host Name", c.instance_name "Instance Name" , DECODE(c.logins,RESTRICTED,YES,NO) "Restricted Mo…

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…

BERT相关知识

1.分词方法 BPE 和 WordPiece 的区别&#xff1f; BPE 与 Wordpiece 都是首先初始化一个小词表&#xff0c;再根据一定准则将不同的子词合并。词表由小变大。BPE 与 Wordpiece 的最大区别在于&#xff0c;如何选择两个子词进行合并&#xff1a;BPE 选择频数最高的相邻子词合并&…

【CVPR24】One-Prompt to Segment All Medical Images

论文介绍 论文: One-Prompt to Segment All Medical Images 代码: https://github.com/KidsWithTokens/one-prompt 会议与年份&#xff1a;CVPR24 全文概述 本文介绍了一种新的医疗图像分割方法—One-Prompt Segmentation。传统的分割方法需要用户在推理阶段为每个样本提供提示…

Linux网络配置与管理

课程知识点 1、主机名的配置 2、网卡信息的配置 3、常用网络命令与网络故障排查 技术目标 掌握主机名与网卡信息的配置掌握常用网络命令的使用与网络故障排查的方法 课程内容 一、主机名的配置 1.1 配置文件 主机名保存在/etc/hostname文件中&#xff0c;可以通过查看…

【附录】Rust国内镜像设置

目录 前言 &#xff08;1&#xff09;设置环境变量 &#xff08;2&#xff09;安装Rust &#xff08;3&#xff09;设置crates镜像 前言 本节课来介绍下如何在国内高速下载安装Rust和Rust依赖&#xff0c;由于网络原因&#xff0c;我们在安装Rust和下载项目依赖时都很慢&am…

js-显示转换(强制转换)与隐式转换,==与===区别

1.显示转换(强制转换)与隐式转换 1.1显示转换 常见的JavaScript强制转换示例。 &#xff08;1&#xff09; 一元加号、一元减号- 值是布尔值&#xff0c;true将被转换为1&#xff0c;false将被转换为0。 let a "123"; let b a; // b的值为123&#xff0c;类型为Nu…

OpenAI 是怎么“压力测试”大型语言模型的?

OpenAI 再次稍微揭开了它的安全测试流程的面纱。上个月&#xff0c;他们分享了一项调查的结果&#xff0c;这项调查研究了 ChatGPT 在根据用户名字生成性别或种族偏见的几率。现在&#xff0c;他们又发布了两篇论文&#xff0c;详细描述了如何对大型语言模型进行“压力测试”&a…