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

Git(8)之分支间同步特定提交

Git(8)之分支间同步特定提交

Author:Once Day Date:2024年4月7日

漫漫长路有人对你微笑过嘛…

全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客

文章目录

      • Git(8)之分支间同步特定提交
        • 1. 分支间同步提交
        • 2. `cherry-pick`同步分支间的特定提交
        • 3. 实例展示

1. 分支间同步提交

在使用Git这个强大的分布式版本控制系统时,经常会遇到需要将一个分支的提交同步到另一个分支的情况。

第一种情况是同步分支上所有改动到另外一个分支,非常常见,这里只是简单介绍一下。

  • 最直接的方法是使用git merge命令。例如,想要把一个分支(比如feature)上的改动合并到另一个分支(比如master)时,可以先切换到目标分支master,然后执行git merge feature。这样,feature分支上的所有提交就会被合并到master上。如果遇到冲突,Git会提示需要手动解决。

  • 另外一种方法是使用git rebase命令。Rebase的意思是变基,简单来说就是把一个分支上的修改放到另一分支的最前面。这样做的好处是能够创建一个更干净、线性的提交历史。使用方法是先切换到要同步的分支,比如feature,然后执行git rebase master。这样feature分支就会把master分支上新的提交应用到feature分之前。在变基的过程中,如果发生冲突,也需要手动解决。

第二种情况是同步某一个特定的提交,例如需要把develop版本分支上的auto-test测试代码提交同步到temp版本分支上。

  • 最常见的方式是手动把auto-test代码全部复制一遍,然后再提交新的commit到temp版本分支上,这个方式效率较低,需要人工同步每个改动,也容易产生遗漏。
  • 通过git stash命令暂存提交,然后在temp版本分支应用修改(apply stash),效率较好,但是需要提前保存改动信息,而且commit信息也还是需要在输入一遍。
  • 使用git cherry-pick命令选择一个或几个提交,然后在temp分支上重新应用。这个方式效率最高,代码改动和提交信息都是直接照搬原有develop分支,不需要额外输入信息。

在实际工作中,上述的几种方法都可以使用。不管是全自动化的同步还是手动同步,最好都人工再审核一遍,毕竟一旦出了问题,耗费时间和精力远比人工检查要多。

2. cherry-pick同步分支间的特定提交

git cherry-pick是一个非常实用的Git命令,它允许选择性地将某个分支上的单个提交(或一系列提交)应用到当前分支上。

这个命令的名称来源于“挑选樱桃”的比喻,意味着可以从众多提交中精选出需要的那几个。

git cherry-pick命令的基本格式如下,其中<commit-hash>是希望应用的提交的哈希值:

# 通过git log或者其他手段来获取commit iD
git cherry-pick <commit-hash>

如果这个提交能够顺利地应用到当前分支上,而没有任何冲突,那么可以看到一个新的提交出现在当前分支的提交历史中这个新提交的内容与通过cherry-pick命令选取的原始提交的内容相同,但是它会有一个新的提交哈希值

如果在应用某个提交时遇到了冲突,Git会停止cherry-pick操作,并需要手动编辑冲突的文件,最后使用git add命令来标记冲突已经解决。在解决完所有冲突并更新索引后,可以通过git cherry-pick --continue来继续应用提交

如果决定不应用当前的cherry-pick操作,可以使用git cherry-pick --abort来取消

git cherry-pick还支持一些有用的选项,例如:

  • -n--no-commit:应用更改但不自动创建提交,允许手动合并多个提交的更改,并最终作成一个提交。
  • -e--edit:在提交时打开编辑器,让你可以编辑提交信息。
  • -x:在提交信息中包含一个说明,指出提交是通过cherry-pick从哪个提交哈希值应用过来的。

git cherry-pick常用于修复bug,当在测试分支上发现了一个bug,并在该分支上修复后,可以通过cherry-pick将修复的提交应用到生产分支上。

3. 实例展示

首先确认需要同步的源分支和目标分支。

ubuntu->tdata:$ git branch -adevelop
* masterremotes/origin/HEAD -> origin/masterremotes/origin/master

从上述命令中,有四个分支,两个远程分支,两个本地分支。我们主要从develop分支同步最新提交到master分支上。

在master分支上通过git log获取提交commit(或者其他手段),如下所示:

ubuntu->tdata:$ git log develop
commit bc75713f30a34e292f59f39d439c08f7ea6b21ed (develop)
Author: Once Day <onceday@qq.com>
Date:   Sun Apr 7 22:55:59 2024 +0800save filescommit d71a12145f1ccd8d8f93f1cc937b70fa22d3ce27 (HEAD -> master, origin/master, origin/HEAD)
Author: Once Day <onceday@qq.com>
Date:   Sat Mar 9 21:50:05 2024 +0800save some
......

第一个提交就是需要同步的提交,复制其commit值,然后使用git cherry-pick命令同步

ubuntu->tdata:$ git cherry-pick bc75713f30a34e292f59f39d439c08f7ea6b21ed
[master 69dc035] save filesDate: Sun Apr 7 22:55:59 2024 +08009 files changed, 405 insertions(+), 29 deletions(-)create mode 100644 cs-test/alias-test.ccreate mode 100644 cs-test/hash-test.ccreate mode 100644 perf-ana/git-sync-simple.shcreate mode 100755 perf-ana/git-sync.shcreate mode 100644 perf-ana/objdump-func.shubuntu->tdata:$ git log
commit 69dc035383d742c95ea2814972191d82ba9a91a3 (HEAD -> master)
Author: Once Day <onceday@qq.com>
Date:   Sun Apr 7 22:55:59 2024 +0800save files

一般情况下,都是非常顺利直接同步,如果存在冲突,手动merge即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c++ Constraints 和 concepts介绍
  • 蓝桥杯算法题:卡片换位
  • WPS二次开发系列:WPS SDK初始化
  • Rustdesk二次编译,新集成AI功能开源Gpt小程序为远程协助助力,全网首发
  • 蓝桥杯刷题-13-子矩阵-二维滑动窗口 ಥ_ಥ
  • LC 226.翻转二叉树
  • 怀俄明探空站数据解算PWV和Tm
  • 什么是软件测试?5分钟带你快速了解!
  • JavaEE初阶-线程3
  • CentOS7:Python版本回退
  • Linux下Qt生成程序崩溃文件
  • 24双非考研哈尔滨工程大学计算机(@程程笔记)
  • hydra九头蛇
  • 海纳斯删除广告位
  • 【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [译]CSS 居中(Center)方法大合集
  • Iterator 和 for...of 循环
  • Javascript Math对象和Date对象常用方法详解
  • js写一个简单的选项卡
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • npx命令介绍
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python爬虫--- 1.3 BS4库的解析器
  • Redux系列x:源码分析
  • vue-router的history模式发布配置
  • 测试开发系类之接口自动化测试
  • 给Prometheus造假数据的方法
  • 悄悄地说一个bug
  • 区块链技术特点之去中心化特性
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • -- 数据结构 顺序表 --Java
  • 一道闭包题引发的思考
  • 智能合约Solidity教程-事件和日志(一)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​secrets --- 生成管理密码的安全随机数​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​一些不规范的GTID使用场景
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #php的pecl工具#
  • #stm32驱动外设模块总结w5500模块
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (3)nginx 配置(nginx.conf)
  • (libusb) usb口自动刷新
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • ***利用Ms05002溢出找“肉鸡
  • .bat批处理出现中文乱码的情况
  • .Mobi域名介绍
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 流——流的类型体系简单介绍