当前位置: 首页 > news >正文

Git操作指南:分支合并、回退及其他重要操作

在软件开发的协作过程中,Git 作为一款强大的版本控制系统,能帮助开发者高效管理代码的各个版本和分支。本文将详细介绍 Git 中常见的分支合并、取消本地修改、回退操作等,并提供通俗易懂的解释和步骤指南。

一、分支合并

分支合并是 Git 工作流程中的关键环节,通常有三种主要方式。每种方式适用于不同的场景,开发者可根据实际需求进行选择。

1.1 普通合并(保留提交历史)

这种方式会将来源分支的所有提交记录完整地合并到目标分支,保留完整的提交历史,方便后续追溯和查看每个提交的具体情况。操作步骤如下:

git checkout 目标分支
git merge 来源分支

例如,若要将 feature 分支合并到 master 分支,可先切换到 master 分支,再执行合并命令。

1.2 变基合并(线性提交历史)

变基合并能使提交历史更简洁、线性,让代码的发展脉络更加清晰。操作相对复杂一些:

git checkout 来源分支
git rebase 目标分支
git checkout 目标分支
git merge 来源分支

这一过程首先在来源分支上,将其提交历史基于目标分支进行重写,然后再合并到目标分支,使提交历史看起来像一条直线。

1.3 合并(合并多个提交)

当你想把来源分支的多个提交压缩成一个时,可使用压合合并,这样可以让提交历史更加简洁,避免过多琐碎的提交记录。

git checkout 目标分支
git merge --squash 来源分支
git commit -m "合并信息"

执行 --squash 参数后,Git 会将来源分支的所有更改合并,但不会创建新的提交,你需要手动提交并添加合并信息。

推荐工作流程

为了确保分支合并的顺利进行,建议遵循以下工作流程:

  1. 更新本地目标分支:在合并前,确保目标分支是最新的,避免合并过时代码。
git checkout master
git pull origin master
  1. 执行合并操作:使用 --no-ff 参数保留分支合并历史,便于后续追溯分支的合并情况。
git merge feature - branch --no - ff
  1. 解决冲突并提交:如果合并过程中出现冲突,Git 会提示你。解决冲突后,添加并提交更改。
git add.
git commit -m "合并 feature 分支"
  1. 推送合并结果:将合并后的更改推送到远程仓库,让团队成员能够获取最新的代码。
git push origin master

注意事项

  • 合并前使用 git fetch --all 获取最新分支状态,保证获取到远程仓库的所有最新信息。
  • 遇到复杂冲突时,git mergetool 提供图形化界面,能更高效地解决问题。
  • 合并后通过 git log --graph --oneline 查看合并历史,清晰展示分支走向。

二、取消本地修改记录,强制拉取远程分支代码

有时,你可能需要放弃本地的所有修改,强制拉取远程分支的最新代码。以下是具体的操作步骤。

2.1 丢弃所有本地修改(包括未跟踪文件)

这一步会清除工作区和暂存区的所有修改,并删除未跟踪的文件和目录,操作不可逆,请谨慎使用。

git reset --hard HEAD && git clean -fd

强制拉取远程分支最新代码

git fetch origin && git reset --hard origin/当前分支名

如果当前分支已设置上游跟踪,可使用简化命令:

git reset --hard @{u}

注意事项

  • git clean -fd 删除未跟踪文件和目录的操作不可逆,务必确认不需要这些文件。
  • reset --hard 会丢弃所有本地提交和修改,操作前确保已提交重要代码。

三、取消分支合并、回退

在某些情况下,需要回退已经完成的分支合并。根据不同的场景,有两种主要的回退方式。

3.1 使用 reset 强制回退(适用于尚未推送到远程或个人分支)

git reset --hard HEAD~1

这条命令会将分支指针直接回退到上一个提交,即合并前的状态。合并后的本地未提交修改会丢失,因此操作前需先使用 git stash 保存。

3.2 使用 revert 撤销合并(适用于已推送到远程的公共分支)

git revert -m 1 HEAD

revert 会创建一个新的反向提交,撤销合并带来的变更,同时保留合并历史,适合团队协作中已推送的公共分支。

3.3 强制推送(已推送到远程仓库时)

如果已经推送到远程仓库,执行 reset 后需要强制推送:

git push origin your_branch_name --force

3.4 建议操作步骤

  1. 先用 git log --graph --oneline 确认要回退的合并提交,确保回退到正确的版本。
  2. 根据是否已推送选择合适的回退方式,避免影响团队其他成员的工作。
  3. 重新拉取正确分支代码(如果需要),保证本地代码与远程仓库一致。
  4. 强制推送前确保团队成员知晓该操作(如果使用 reset),避免覆盖他人工作。

四、回退到某个版本

在开发过程中,可能需要将代码回退到之前的某个版本。根据不同的需求,有两种回退方式可供选择。

彻底回退(丢弃目标版本之后的修改)

git reset --hard <commit - hash>

这种方式会将工作区、暂存区和分支指针都回退到指定的提交版本,目标版本之后的所有修改将被丢弃。

4.2 软回退(保留修改作为未提交状态)

git reset --soft <commit - hash>

软回退仅移动分支指针,工作区和暂存区的修改会保留,方便你检查和重新提交。

4.3 具体操作步骤

  1. 使用 git log --oneline --graph 查找提交记录,通过可视化的方式快速定位目标版本。
  2. 找到目标版本的 commit hash(例如 abc1234),执行回退命令:
git reset --hard abc1234

4.4 重要注意事项

  • --hard 回退会丢弃目标版本之后的所有修改,操作前确认已提交重要代码。
  • 如果已经推送到远程仓库,需要强制推送覆盖:
git push origin your_branch --force
  • 若误操作想恢复,可使用 git reflog 查找操作记录恢复:
git reset --keep <commit - hash>

五、取消变基

当你在进行变基操作时,若想中途取消,可按以下步骤操作。

5.1 终止变基过程

git rebase --abort

5.2 验证仓库状态

使用 git status 检查,应显示 “nothing to commit, working tree clean”,确保仓库状态正常。

5.3 恢复分支到变基前状态(如果已部分完成变基)

git reset --hard ORIG_HEAD

5.4 注意事项

  • 该操作会丢弃变基过程中所有未提交的修改,操作前请做好数据备份。
  • 如果变基前有未提交的修改,建议先通过 git stash 保存工作进度。
  • 执行后分支会回退到执行 git rebase 之前的状态。

通过掌握这些 Git 操作,开发者能够更加灵活、高效地管理代码版本,确保项目开发的顺利进行。无论是分支合并、回退,还是取消本地修改,都能在遵循操作指南的前提下安全执行。

相关文章:

Git操作指南:分支合并、回退及其他重要操作

在软件开发的协作过程中&#xff0c;Git 作为一款强大的版本控制系统&#xff0c;能帮助开发者高效管理代码的各个版本和分支。本文将详细介绍 Git 中常见的分支合并、取消本地修改、回退操作等&#xff0c;并提供通俗易懂的解释和步骤指南。 一、分支合并 分支合并是 Git 工…...

Element Plus中el-tree点击的节点字体变色加粗

el-tree标签设置 <el-tree class"tree":data"treeData":default-expand-all"true":highlight-current"true"node-click"onTreeNodeClick"><!-- 自定义节点内容&#xff0c;点击的节点字体变色加粗 --><!-- 动…...

jenkens使用笔记

jenkens使用笔记 笔记使用版本是2.492.1 git仓库ssh证书配置 已开始配置一直不行&#xff0c;然后下载插件&#xff0c;多次重启等一些列操作&#xff0c; 后来配置就可以工作了&#xff0c;原因不祥&#xff0c;不知道哪个配置起效了。 等回来闹明白了&#xff0c;再补充笔记…...

腾讯混元文生图大模型(Hunyuan-DiT)与Stable Diffusion(SD)对比分析

腾讯混元文生图大模型&#xff08;Hunyuan-DiT&#xff09;与Stable Diffusion&#xff08;SD&#xff09;对比分析 腾讯混元文生图大模型&#xff08;Hunyuan-DiT&#xff09;与Stable Diffusion&#xff08;SD&#xff09;作为当前文生图领域的两大代表模型&#xff0c;各自…...

深入浅出理解编译器:前端视角

一、编译器究竟是什么&#xff1f; 在前端开发的世界里&#xff0c;我们经常会听到 “编译器” 这个词。就拿 Babel 来说&#xff0c;在它的官网上&#xff0c;最显眼的一句话就是&#xff1a;“Babel is a JavaScript compiler”。那什么是 JavaScript 编译器呢&#xff1f;又…...

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…...

Ubuntu系统上部署Node.js项目的完整流程

以下是在Ubuntu系统上部署Node.js项目的完整流程&#xff0c;分为系统初始化、环境配置、项目部署三个部分&#xff1a; 一、系统初始化 & 环境准备 bash # 1. 更新系统软件包 sudo apt update && sudo apt upgrade -y# 2. 安装基础工具 sudo apt install -y buil…...

DeepSeek效应初现:Grok-3补刀ChatGPT,OpenAI已在ICU?

嘿&#xff0c;技术小伙伴们&#xff01;今天咱们聊聊最近在AI界引发轰动的新闻——DeepSeek和xAI相继用R1和Grok-3证明了预训练Scaling Law并非OpenAI的护城河。这意味着什么呢&#xff1f;让我们一探究竟&#xff01; 开场白 首先&#xff0c;让我们看看最新的“全能冠军”…...

【知识】torchrun 与 torch.multiprocessing.spawn 的对比

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 来自ChatGPT、DeepSeek 有点干&#xff0c;可仅做了解。 torchrun 和 torch.multiprocessing.spawn 都是在 PyTorch 中用于并行化和分布式训练的工具&a…...

深入了解 K-Means 聚类算法:原理与应用

引言 在数据科学和机器学习的世界中&#xff0c;聚类是一项非常重要的技术&#xff0c;它帮助我们根据数据的相似性将数据划分为不同的组或簇。聚类算法在许多领域中得到了广泛的应用&#xff0c;如图像处理、市场细分、基因研究等。K-Means 聚类算法作为最常见的无监督学习算…...

Rust ~ Collect

背景 Transforms an iterator into a collection 将一个迭代器转换为一个集合 collect() 可以处理任何可迭代的对象&#xff0c;并将其转换为相关的集合 collect() 最基本模式是将一个集合转换为另一个集合&#xff1a; 先获取一个集合&#xff0c;对其调用 iter 方法&#x…...

C# 类型转换

C# 类型转换 引言 在C#编程语言中&#xff0c;类型转换是一种将一个数据类型的变量转换成另一个数据类型的操作。类型转换是编程中常见的操作&#xff0c;特别是在处理不同数据类型的变量时。本文将详细探讨C#中的类型转换&#xff0c;包括隐式转换和显式转换&#xff0c;以及…...

[IP] DDR_FIFO(DDR3 用户FIFO接口)

IP(DDR_FIFO)将DDR3 IP的用户侧复杂接口修改为简易的FIFO接口&#xff0c;用户侧更加简易例化使用MIG 核 IP介绍 c0_xx (连接DDR app接口) 此IP 仅需根据MIG配置进行有限修改&#xff0c;即可使用&#xff01; 关于IP详细使用说明&#xff0c;参考IP datasheet&#xff01; 示…...

第三百七十二节 JavaFX教程 - JavaFX HTMLEditor

JavaFX教程 - JavaFX HTMLEditor HTMLEditor控件是一个富文本编辑器&#xff0c;具有以下功能。 粗体斜体下划线删除线字体系列字体大小前景色背景颜色缩进项目符号列表编号列表对齐水平线复制文本片段粘贴文本片段 HTMLEditor类返回HTML字符串中的编辑内容。 创建HTML编辑器…...

蓝桥杯试题:DFS回溯

一、题目要求 输入一个数组n&#xff0c;输出1到n的全排列 二、代码展示 import java.util.*;public class ikun {static List<List<Integer>> list new ArrayList<>();public static void main(String[] args) { Scanner sc new Scanner(System.in);…...

Lua | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…...

每日一题——接雨水

接雨水问题详解 问题描述 给定一个非负整数数组 height&#xff0c;表示每个宽度为 1 的柱子的高度图。计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#…...

java常见面试01

为什么重写 equals 还要重写 hashcode &#x1f308; 核心原因&#xff1a; 当两个对象通过equals()判断为相等时&#xff0c;它们的hashCode()必须返回相同的整数值&#xff01;这是Java世界的交通规则哦~&#xff08;交警曼波敬礼.jpg&#xff09; &#x1f9e9; 具体场景…...

算法-二叉树篇27-把二叉搜索树转换为累加树

把二叉搜索树转换为累加树 力扣题目链接 题目描述 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提…...

C语言:51单片机 基础知识

一、单片机概述 单片机的组成及其特点 单片机是指在一块芯片上集成了CPU、ROM、RAM、定时器/计数器和多种I/O接口电路等&#xff0c;具有一定规模的微型计算机。 特点&#xff1a; 1、单片机的存储器以ROM、RAM严格分工。 2、采用面向控制的指令系统。 3、单片机的I/O口引脚通…...

2026年AI Agent元年:从对话式交互到自主任务执行的跨越

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

CN3881-规格书 如韵电子 10A 降压型同步单节锂电池充电管理集成电路

概述: CN3881 是一款可使用太阳能供电的 PWM 降压模式单节锂电池充电管理集成电路&#xff0c;可独立对单 节锂电池充电进行管理&#xff0c;具有封装外形小&#xff0c;外围元器件少和使用简单等优点。 CN3881 采用涓流&#xff0c;恒流和恒压充电模式&#xff0c;非常适合单节…...

多功能 PEG 衍生物 Ergosterol-PEG-MAL,Ergosterol-PEG-Maleimide详解

试剂基本信息中文名称&#xff1a;麦角固醇-聚乙二醇-马来酰亚胺英文名称&#xff1a;Ergosterol-PEG-MAL&#xff0c;Ergosterol-PEG-Maleimide分子量&#xff1a;0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c…...

教育培训品牌视觉体系全攻略:5步打造统一、专业、让人过目不忘的品牌形象

教育培训机构的品牌视觉是否混乱&#xff0c;直接影响家长和学员的第一印象。宣传海报用一种蓝&#xff0c;公众号封面又是另一种蓝&#xff0c;课程介绍册的字体也和官网不一样。这种视觉不统一的问题&#xff0c;会让品牌显得不够专业&#xff0c;降低信任感。今天分享一套用…...

IDM注册表权限控制技术深度解析:突破30天试用期的终极方案

IDM注册表权限控制技术深度解析&#xff1a;突破30天试用期的终极方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 核心技术原理&#xff1a;Windows注册表权…...

GBase 8c 表空间规划和对象迁移

GBase 8c 表空间规划和对象迁移 我最近看 GBase 8c 资料时&#xff0c;越来越强烈的一个感觉是&#xff1a;很多现场不是不会建表空间&#xff0c;而是把表空间用得太晚、太散、太随意。 真正落到现场时&#xff0c;最常见的现象通常不是“不会执行 CREATE TABLESPACE”&#x…...

LoadRunner Developer实战:如何在VSCode中集成性能测试(含Jenkins流水线配置)

LoadRunner Developer实战&#xff1a;VSCode集成与Jenkins流水线配置全指南 在DevOps实践中&#xff0c;性能测试左移已成为提升软件质量的关键策略。作为Micro Focus推出的开发者友好型工具&#xff0c;LoadRunner Developer让开发团队能在编码阶段就发现性能瓶颈。本文将手…...

服务机器人开发终极指南:从NAO到Pepper的完整编程实战

服务机器人开发终极指南&#xff1a;从NAO到Pepper的完整编程实战 【免费下载链接】awesome-robotics A list of awesome Robotics resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-robotics 服务机器人开发是一个融合机械设计、人工智能与编程的跨学科…...

百度网盘提取码智能获取工具:提升资源获取效率的技术方案

百度网盘提取码智能获取工具&#xff1a;提升资源获取效率的技术方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源爆炸的今天&#xff0c;百度网盘作为主流文件分享平台&#xff0c;已成为学习资料、工作文件和媒…...

告别单点故障:Azkaban 3.84.4多Executor集群部署与性能调优实战

告别单点故障&#xff1a;Azkaban 3.84.4多Executor集群部署与性能调优实战 在数据密集型企业的日常运营中&#xff0c;任务调度系统如同中枢神经般重要。当团队规模扩大、数据处理需求激增时&#xff0c;单节点Azkaban往往会成为性能瓶颈——任务队列堆积、响应延迟&#xff0…...