热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gitmergesquash/gitrebasei/gitcherrypick

gitmerge–squashgitmerge--squash{srcBranch}常用于将feat分支合并至dev时压缩繁杂的提交日志,让合并变得清晰明了。将srcBranch上

git merge –squash

git merge --squash {srcBranch} 常用于将feat分支合并至dev时压缩繁杂的提交日志,让合并变得清晰明了。

srcBranch上的超前于当前分支的 commits 合并至当前分支,且当前分支不进行commit,合并或解决冲突成功后,允许我们手动做一次 commit log,这样srcBranch的多个 commits 合并至当前分支时只产生一个commit 了。

git checkout dev
echo 1111 >> foo.txt
git add foo.txt
git commit -m "foo.txt 1111"
git checkout -b feat_1
echo 2222 >> foo.txt && git commit -am "foo.txt 2222"
echo 3333 >> foo.txt && git commit -am "foo.txt 3333"
echo 4444 >> foo.txt && git commit -am "foo.txt 4444"
git log
git checkout dev
# 如果我们直接 git merge feat_1 的话 那 feat_1 的所有提交都会记录至 dev
# 但我们想简洁的表征一下
git merge --squash feat_1
# 手动编写 log 提交
git commit -m '
foo.txt 2222
foo.txt 3333
foo.txt 4444
'
# 或者使 diff logs 为模板提交
git commit -v
# 进入 vim 模式 编辑合并的 log
:wq
# 可以看到 feat_1 的 3 log 合并到 dev 上后只有 1 log
git log

--squash 的作用为只合并源分支的内容到当前分支的stage区,将commit交由我们来决定,这样便可以整合其他分支的提交日志。

git rebase -i

切记不可用于协同开发的分支,只能用于独自使用的分支。

git rebase -i [startPoint] [endPoint]

rebase可以方便我们编辑本分支的commit记录:合并,修改,删除。比如我在feat分支上开发测试ok,需要合并到dev分支,但feat上有很多繁杂的commit logs,我们可能并不需要在dev中体现,可能有人想到可以在dev上使用 merge --squash,但如果feat落后dev 很多,这时我们可能需要使用 git cherry-pick commitLogHash的方法将feat中特定的提交合并至dev分支。这时就需要我们在dev的基础分支上创建一个temp分支,temp merge --squash feat后获得一次性提交的temp_commit_log,然后切换至dev执行 git cherry-pick {temp_commit_log}合并至dev分支,或者我们可以使用 rebase -i HEAD~N HEAD 的方式合并本分支的多次提交。

合并多条提交记录至用一条

git checkout dev
echo 1111 >> bar.txt && git add bar.txt
git commit -m "bar.txt 1111"
git checkout -b feat_2 dev
echo 2222 >> bar.txt && git commit -am "bar.txt 2222"
echo 3333 >> bar.txt && git commit -am "bar.txt 3333"
echo 4444 >> bar.txt && git commit -am "bar.txt 4444"
# 开发完成 要讲 feat_2 合并回 dev 但不想要太多 feat-2 的 log
git rebase -i dev
-----------------------------------------------------------------------
pick 0483730 bar.txt 2222
pick adf4d92 bar.txt 3333
pick cd1b421 bar.txt 4444
# Rebase 7ffea48..cd1b421 onto 7ffea48 (3 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
# l, label

修改 commit log

git rebase -i [startpoint] [endpoint] 的 startpoint 为开区间,所以如我们想修改提交的日志,需要如下

#重建最近一次的提交
git rebase -i HEAD~1
#重建 HEAD~3 - HEAD~2 的两次提交
git rebase -i HEAD~4 HEAD~2

实例,我们对feat_4foo4做了 4 次提交,日志如下

git log --pretty=oneline --abbrev-commit
fed40ed (HEAD -> feat_4) foo4 4444
8455d9a foo4 3333
1548e84 foo4 2222
53e837b foo4 1111

重写最近一次提交的日志

git rebase -i HEAD~1
#进入交互模式
pick fed40ed foo4 4444
# Rebase 8455d9a..fed40ed onto 8455d9a (1 command)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
# l, label

git rebase -i合并/修改提交记录的方法如上所示。

git cherry-pick

git cherry-pick的使用场景主要是用于挑选合并某分支上的提交到当前分支。比如我们将feat1合并到了dev,产生了log-dev-feat-1,将feat1合并到了dev,产生了log-dev-feat-2,现在我只想将feat1发布到测试分支,git merge dev已经不能满足了,因为会将log-dev-feat-2一起合并过来。

git checkout dev
git merge feat1
git merge feat2
git log --pertty=oneline
git checkout test
# 挑选合并feat1的提交
git cherry-pick feat1-log-hash

这样我们就可以灵活的选择要发布到测试环境的功能项了。


推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 思科IOS XE与ISE集成实现TACACS认证配置
    本文详细介绍了如何在思科IOS XE设备上配置TACACS认证,并通过ISE(Identity Services Engine)进行用户管理和授权。配置包括网络拓扑、设备设置和ISE端的具体步骤。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • TypeScript ESLint: 避免使用隐式 any 类型,建议指定更具体的类型以提高代码可维护性
    在使用 Vue 引入 SVGSpriteLoader 时遇到了问题。具体表现为在 `shims-vue.d.ts` 文件中进行相关配置后,WebStorm 报错。为了解决这一问题,建议避免使用隐式 `any` 类型,而是指定更具体的类型,以提高代码的可维护性和类型安全性。可以通过在 ESLint 配置中禁用隐式 `any` 类型来实现这一目标。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 在C#中开发MP3播放器时,我正在考虑如何高效存储元数据以便快速检索。选择合适的数据结构,如字典或数组,对于优化性能至关重要。字典能够提供快速的键值对查找,而数组则在连续存储和遍历方面表现优异。根据具体需求,合理选择数据结构将显著提升应用的响应速度和用户体验。 ... [详细]
author-avatar
手哥2502852243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有