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

git的cherrypick与rebase命令

cherry-pick命令cherry-pick命令可以将另一分支的commit内容合并到当前分支。假如现在有两个分支v1.0,v1.1。v1.0有如下commit:commit4

cherry-pick命令

cherry-pick命令可以将另一分支的commit内容合并到当前分支。

假如现在有两个分支v1.0,v1.1。
v1.0有如下commit:

commit 4d3b38f3e6b9f49776f6e2d2861f0425e10df8d6 (HEAD -> v1.0)
Author: bin
Date: Tue Mar 19 10:33:43 2019 +0800
feature5
commit 65ad383c977acd6c7e7bed486bbf3631851a9eda
Author: bin
Date: Tue Mar 19 10:30:44 2019 +0800
feature4
commit a2a438f2652166f13a6a2aa36f447968fff3b15d
Author: bin
Date: Tue Mar 19 10:30:09 2019 +0800
feature3

现在v1.1需要合并feature4的功能,但不能合并feature3,feature5,怎么办?
把代码复制过来吗?不!!!用cherry-pick

git cherry-pick 65ad383c977acd6c7e

如果文件有冲突,cherry-pick 会中断,
你解决冲突后,使用git add添加冲突文件,使用git cherry-pick –continue完成cherry-pick操作。
或者使用git cherry-pick –abort中断操作。

如果你cherry-pick的是别人分支的commit,可能会遇到错误fatal: bad object ...,那是因为git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。如果没有这个commit id,就会出现这个错误。先把别人的分支拉取到本地再执行命令就可以了。

rebase命令

之前都不太在意 git rebase的使用,直到看了这篇文章
彻底搞懂 git rebase,规范项目的commit

想想也是的,如果git log充斥着大量如下commit:

fixbug
fixbug
fixbug
add log
add log
add log
add log

文章中提到的
1.不利于代码 review
2.不利于代码回滚
同时,也不利于自己回顾跟踪代码。

所以可以使用rebase合并commit。
我把上面栗子中v1.0分支所有commit合并为一个

git rebase -i a2a438f2652 4d3b38f3e

其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作。
这时会弹出编辑页面

r a2a438f feature3
# Rebase 1822165..46c1e55 onto 1822165 (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
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.

上面是指令编辑,下面注释是指令说明:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

根据我们需要编辑指令后保存,就可以完成commit的合并了。

git rebase合并其他分支与git cherry-pick异曲同工,这里不再复述了。

上面文章中也说到,git rebase会修改commit 记录,属于危险操作,需小心操作。

参考:
rebase 用法小结

commit补提文件

还有一个小技巧,如果我们commit之后发现漏掉了一个文件, 这时候可以对这个文件再进行commit一次, 但这样做就显得很多余,而且容易污染commit记录,而进行版本回退再添加也比较麻烦. 这个时候就可以使用这个amend命令.如下:

$ git commit -m "版本1.5开发代码"
# 正当你松了一口气的时候发现配置文件忘记修改了, 你赶紧修改,并适合用add到暂存区
$ git add project.property
$ git commit --amend
# 你会神奇的发现你没有增加任何多余的操作就把漏掉的文件补齐到最后一次提交中

参考:
Git 王者超神之路


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
author-avatar
FXHT4564_845
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有