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 操作,开发者能够更加灵活、高效地管理代码版本,确保项目开发的顺利进行。无论是分支合并、回退,还是取消本地修改,都能在遵循操作指南的前提下安全执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(初阶)(七)----树和二叉树(堆,堆排序)

八&#xff0c;树与二叉树 树 概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀…

数据集笔记:新加坡 地铁(MRT)和轻轨(LRT)票价

数据连接 data.gov.sg 2024 年 12 月 28 日起生效的新加坡地铁票价 该数据集包含 MRT 和 LRT 票价的信息&#xff0c;包括&#xff1a; 票价类型&#xff08;Fare Type&#xff09;&#xff1a;成人票、学生票、老年人票、残障人士票等。适用时间&#xff08;Applicable Tim…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…

530 Login fail. A secure connection is requiered(such as ssl)-java发送QQ邮箱(简单配置)

由于cs的csdN许多文章关于这方面的都是vip文章&#xff0c;而本文是免费的&#xff0c;希望广大网友觉得有帮助的可以多点赞和关注&#xff01; QQ邮箱授权码到这里去开启 授权码是16位的字母&#xff0c;填入下面的mail.setting里面的pass里面 # 邮件服务器的SMTP地址 host…

经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑

背景 对于一些内部使用的管理系统来说&#xff0c;可能没有引入Redis&#xff0c;又想基于现有的基础设施处理并发问题&#xff0c;而数据库是每个应用都避不开的基础设施之一&#xff0c;因此分享个我曾经维护过的一个系统中&#xff0c;使用数据库表来实现事务锁的方式。 之…

【 实战案例篇三】【某金融信息系统项目管理案例分析】

大家好,今天咱们来聊聊金融行业的信息系统项目管理。这个话题听起来可能有点专业,但别担心,我会尽量用大白话给大家讲清楚。金融行业的信息系统项目管理,说白了就是如何高效地管理那些复杂的IT项目,确保它们按时、按预算、按质量完成。咱们今天不仅会聊到一些理论,还会通…

爬虫系列之发送请求与响应《一》

一、请求组成 1.1 请求方式&#xff1a;GET和POST请求 GET:从服务器获取&#xff0c;请求参数直接附在URL之后&#xff0c;便于查看和分享&#xff0c;常用于获取数据和查询操作 POST&#xff1a;用于向服务器提交数据&#xff0c;其参数不会显示在URL中&#xff0c;而是包含在…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…

题解 | 牛客周赛83 Java ABCDEF

目录 题目地址 做题情况 A 题 B 题 C 题 D 题 E 题 F 题 牛客竞赛主页 题目地址 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 做题情况 A 题 输出两个不是同一方位的字符中的任意一个就行 import java.io.*; import java.math.*; import java…

netty如何处理粘包半包

文章目录 NIO中存在问题粘包半包滑动窗口MSS 限制Nagle 算法 解决方案 NIO中存在问题 粘包 现象&#xff0c;发送 abc def&#xff0c;接收 abcdef原因 应用层&#xff1a;接收方 ByteBuf 设置太大&#xff08;Netty 默认 1024&#xff09;滑动窗口&#xff1a;假设发送方 25…

【Linux】I/O操作

目录 1. 整体学习思维导图 2. 理解文件 2.1 文件是什么&#xff1f; 2.2 回顾C语言库函数的文件操作 2.3 stdin/stdout/stderr 2.4 系统的文件I/O操作 2.4.1 了解位图标记位方法(宏) 2.4.2 认识系统I/O常用调用接口 2.5 对比C文件操作函数和系统调用函数 2.5.1 fd是什么…

ISP CIE-XYZ色彩空间

1. 颜色匹配实验 1931年&#xff0c;CIE综合了前人实验数据&#xff0c;统一采用700nm&#xff08;红&#xff09;、546.1nm&#xff08;绿&#xff09;、435.8nm&#xff08;蓝&#xff09;​作为标准三原色波长&#xff0c;绘制了色彩匹配函数&#xff0c;如下图。选定这些波…

5G学习笔记之BWP

我们只会经历一种人生&#xff0c;我们选择的人生。 参考&#xff1a;《5G NR标准》、《5G无线系统指南:如微见著&#xff0c;赋能数字化时代》 目录 1. 概述2. BWP频域位置3. 初始与专用BWP4. 默认BWP5. 切换BWP 1. 概述 在LTE的设计中&#xff0c;默认所有终端均能处理最大2…

计算机毕业设计SpringBoot+Vue.js智能无人仓库管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

qt-C++笔记之QToolButton和QPushButton的区别

qt-C笔记之QToolButton和QPushButton的区别 code review! 文章目录 qt-C笔记之QToolButton和QPushButton的区别1.运行2.main.cpp3.main.pro 1.运行 QToolButton 适用于工具栏或需要较紧凑、图标化显示的场合。通过 setAutoRaise(true) 与 setToolButtonStyle(Qt::ToolButtonTe…

[含文档+PPT+源码等]精品基于Python实现的vue3+Django计算机课程资源平台

基于Python实现的Vue3Django计算机课程资源平台的背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、教育行业发展背景 1. 教育资源数字化趋势 随着信息技术的快速发展&#xff0c;教育资源的数字化已成为不可逆转的趋势。计算机课程资源作为教育领域的重要组成部…

项目准备(flask+pyhon+MachineLearning)- 3

目录 1.商品信息 2. 商品销售预测 2.1 机器学习 2.2 预测功能 3. 模型评估 1.商品信息 app.route(/products) def products():"""商品分析页面"""data load_data()# 计算当前期间和上期间current_period data[data[成交时间] > data[成…