git check-pick,git patch 与 git stash 详解

2023-11-12

大家好,我是 17。

今天和大家聊一聊 git check-pick,git patch 与 git stash 的用法。

git cherry-pick

为什么要用 cherry-pick?

不适合 merge 的场景就可以考虑 cherry-pick。

试想下面这些场景

  1. 只想同步分支的部分提交。两个分支是两上完全独立的 feature,不适合 merge。

  2. 不想过早的同步分支。

下面举几个例子。 dev 为 分支 ,A、B 为 commit。

git cherry-pick dev   将 dev 分支的最近一次提交,转移到当前分支。
git cherry-pick A 可以转移有权访问的任意分支的任意提交。
git cherry-pick A B 一次可以同步多个提交   
    
转移从 A 到 B 的所有提交,不包含 提交 A。提交 A 必须早于提交 B,否则命令将失败,但不会报错。
git cherry-pick A..B 

包含提交 A 
git cherry-pick A^..B   

如果没有冲突会在当前分支形成一个新的提交,提交的内容和 message 完全一样,只是 hash( commit id) 值不一样。

如果有冲突,解决冲突的方法前面在 git checkout 那一节已经说过,解决的方法是一样的,最后用 git cherry-pick --contine,如果想撤销用 git cherry-pic --abort

git patch

为什么要用 patch?

不适合 merge,也不方便 cherry-pick 的场景,可以考虑 patch。

试想下面这些场景

  1. 两个不同的 git 库,其中的某段代码需要同步。
  2. 有些修改会影响所有开发者,但你想做这个修改,来验证一些东西。你需要另一个开发配合,需要把这个修改同步给他。直接 copy 是个办法,但如果修改较多,容易出错,用 patch 比较合适。

虽然 check-pick 也可以同步不同的库,但实操的时候,因为权限或安全问题,不大方便联网同步。

patch 方案

pach 有两种方案,diff 和 format-patch。

diff 仅保留了文件重 A 状态变成 B 状态的差别,而不会保留 commit 记录消息等信息,diff可以多个commit生成单个patch。用 git apply 应用补丁。

format-patch 完整保留了每次提交的完成信息,每个commit都生成一个patch文件。用 git am 应用 补丁。

检查都是用 git apply --check。查看 都是 git applay -stat

diff 生成 patch,apply 应用patch

制作 patch

git diff >fix.patch  
    
git diff 38d8e02 >fix.patch 相当于 
git diff 38d8e02 HEAD >fix.patch

总之,diff 的结果都可以制作 patch。

应用 patch

git apply --check fix.patch
git apply fix.patch

format-patch 制作 patch ,am 应用 patch

git format-patch -2               用最近的两次提交制作 patch 
git format-patch commitId         某次提交以后的所有patch,不包括本次提交
git format-patch --root commitId  从第一次提交到指定提交的所有 patch
git format-patch -o patch -2      输出 patch 文件到 patch 文件夹      

format-patch 制作的 patch 是一个提交一个文件,正序排列。

0001-第一次提交.patch
0002-第二次提交.patch

应用提交

git apply --check *.patch
git am *.patch

git stash

stash 的英文原意是 贮藏。git stash 的功能就是把当前工作区的内容存起来。和提交到暂存区不同,git stash贮藏的内容不受分支切换的影响。

应用场景

  1. 开发了一阵,发现分支错了。这时最好的文案就是 git stash save ,切到新分支后 git stash pop
  2. 开发到一半,有一个紧急的 bug 要 fix,这时提交会造成无效的提交记录。可以先 git stash save,切换分支修复 bug,再切回来 git stash pop

注意:没有被 add 过的文件不会被 stash 起来,如果想把这些文件也一起 stash,可以加上 -u 参数,它是 --include-untracked 的简写, git stash -u。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git check-pick,git patch 与 git stash 详解 的相关文章

  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • 有没有办法缓存 https 凭据以推送提交?

    我最近转而将我的存储库同步到 GitHub 上的 https 由于防火墙问题 并且每次都要求输入密码 有没有办法缓存凭据 而不是每次都进行身份验证git push 自 Git 1 7 9 2012 年发布 以来 Git 中有一个巧妙的机制可
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • IntelliJ:查看本地和 git 提交/分支之间所有已更改文件的差异

    使用 IntelliJ 的 diff 查看器是检查代码的一种非常好的方法 因为您可以使用 IntelliJ 代码编辑器的所有功能 重构 完成等 在本地版本中进行更改 不幸的是 我还没有弄清楚当你在 IntelliJ 中进行代码审查时如何做最
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • 代表 Git 存储库的数学结构是什么

    我正在学习 Git 如果我能描述一下代表 Git 存储库的数学结构 那就太好了 例如 它是一个有向无环图 它的节点代表提交 它的节点有代表分支等的标签 每个节点最多一个标签 没有标签使用两次 我知道这个描述不正确 我只是想解释我正在寻找的内
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件

随机推荐

  • ​语义分割损失函数​

    这里面有几个损失函数 GitHub MichaelFan01 STDC Seg Source Code of our CVPR2021 paper Rethinking BiSeNet For Real time Semantic Segm
  • Hadoop学习笔记(1)

    原文 http www cnblogs com zjfstudio p 3859704 html Hadoop学习笔记 1 菜鸟入门 Hadoop是什么 先问一下百度吧 百度百科 一个分布式系统基础架构 由Apache基金会所开发 用户可以
  • 一文说清产品经理、项目经理、产品负责人的区别

    以下为译文 原文链接 https nealcabage com product vs project vs program management 太多的团队无法区分Product Manager Product Owner Program
  • SSD 之OP预留空间

    SSD上的OP指的是用户不可操作的容量 大小为实际容量减去用户可用容量 OP区域一般被用于优化操作如 WL GC和坏块映射等 OP一般分三层 见下图 第一层容量固定为SSD标称容量的7 37 这是因为标称容量采用千进制为单位 而NAND颗粒
  • 并行编程——OpenMP

    文章目录 并行机体系结构 并行机体系结构及通信机制 并行程序 设计方法 设计模型 openmp 基础 OpenMp简介 在VS中启用OpenMP OpenMp并行编程模型 OpenMp 存储模型 支持条件编译 并行化控制 编译制导 功能指令
  • 小扎亲自官宣Meta视觉大模型!自监督学习无需微调,多任务效果超OpenCLIP丨开源...

    萧箫 发自 凹非寺量子位 公众号 QbitAI 无需文字标签 完全自监督的Meta视觉大模型来了 小扎亲自官宣 发布即收获大量关注度 在语义分割 实例分割 深度估计和图像检索等任务中 这个名叫DINOv2的视觉大模型均取得了非常不错的效果
  • feign get方法参数是form提交方式

    使用feign调用服务端接口时如果服务端接口是get方式 并且采用form方式表达提交的时候需要使用 SpringQueryMap 注解 但是参数列表中只能使用一个 SpringQueryMap注解 多个只会有一个生效 服务端 被调用方 c
  • 全球及中国动脉导管未闭治疗设备行业渠道模式分析与需求前景预测报告2022版

    全球及中国动脉导管未闭治疗设备行业渠道模式分析与需求前景预测报告2022版 修订日期 2021年12月 搜索鸿晟信合研究院查看官网更多内容 2021年 全球动脉导管未闭治疗设备市场规模达到了 百万美元 预计2027年可以达到 百万美元 年复
  • 理事的三板斧-以项目部为例

    作为管理者来说 无非是理事 管人 这中间理事尤为重要 因为事理的不清楚 人肯定难管好 即使有个人魅力 队伍凝聚力强 事理的不对 也会事倍功半 长期的去看 团队也会出问题的 事理的清楚 我认为主要有三点 目标 流程 模板 目标清楚了 方向就不
  • 跨度计算算法

    int FindingSpans int inputArray int spans new int inputArray length for int i 0 i lt inputArray length i int span 1 int
  • 关于matplotlib及相关cmap参数的取值

    关于matplotlib及相关cmap参数的取值 在matplotlib中对于图片的显示有如下方法 这不是重点 其中有cmap binary 的参数 plt imshow imgs i reshape 28 28 cmap binary 或
  • Linux系统之安装java开发环境

    Linux系统之安装java开发环境 一 java介绍 1 java简介 2 java的三大平台 3 java的主要特性 二 检查本地系统环境 1 检查系统版本 2 检查系统内核版本 三 清空java环境 1 删除java目录 2 移除所有
  • 不高兴的津津1073

    Description 津津上初中了 妈妈认为津津应该更加用功学习 所以津津除了上学之外 还要参加妈妈为她报名的各科复习班 另外每周妈妈还会送她去学习朗诵 舞蹈和钢琴 但是津津如果一天上课超过八个小时就会不高兴 而且上得越久就会越不高兴 假
  • 经典Proxool.properties

    数据库1jdbc 1 proxool alias WEBGISjdbc 1 proxool driver class oracle jdbc driver OracleDriverjdbc 1 proxool driver url jdbc
  • JNLP 文件无法打开的解决办法

    JNLP Java Network Launching Protocol 是 java 提供的一种可以通过浏览器直接执行 java 应用程序的途径 它使你可以直接通过一个网页上的 URL 连接打开一个 java 应用程序 因此 要运行 jn
  • 用户·角色·权限·表

    一 引言 因为做过的一些系统的权限管理的功能虽然在逐步完善 但总有些不尽人意的地方 总想抽个时间来更好的思考一下权限系统的设计 权限系统一直以来是我们应用系统不可缺少的一个部分 若每个应用系统都重新对系统的权限进行设计 以满足不同系统用户的
  • React新特性hooks中memo,usememo,useCallback的区别

    useMemo memo类似于PureCompoent 作用是优化组件性能 防止组件触发重渲染 memo针对 一个组件的渲染是否重复执行
  • 江苏开票系统安全接入服务器地址,江苏省增值税发票查询平台网址.doc

    江苏省增值税发票查询平台网址 江苏省增值税发票查询平台网址 81 增值税发票查询平台于2016年5月27日在全国36个省 市 自治区升级完毕 目前全国统一版本为V2 0 00 新版本上线后 功能更加强大和人性化 为了使广大纳税人能更加正确
  • nginx出现 “414 request-uri too large”

    公司项目有一个模块 在请求查询的时候使用了Get方法 由于拼接的url过长 导致nginx出现了 414 request uri too large 错误 出现这种问题可以按照如下解决 在nginx的nginx conf修改如下参数的 cl
  • git check-pick,git patch 与 git stash 详解

    大家好 我是 17 今天和大家聊一聊 git check pick git patch 与 git stash 的用法 git cherry pick 为什么要用 cherry pick 不适合 merge 的场景就可以考虑 cherry