最近,有人要求我cherry-pick提交。

那么在git中选择提交是什么意思呢? 你怎么做呢?


#1楼

引用来自: 使用Git进行版本控制 (非常不错的书,如果您对git感兴趣,我建议您购买它)

编辑:由于此答案仍然令人印象深刻,我想在此视频教程中添加一个非常好的内容:

Youtube:Git樱桃简介

使用git cherry-pick命令git cherry-pick commit会在当前分支上应用由命名提交引入的更改。 它将引入一个新的,独特的提交。 严格来说,使用git cherry-pick不会更改存储库中的现有历史记录; 相反,它增加了历史记录。 与其他通过diff引入更改的Git操作一样,您可能需要解决冲突才能完全应用给定commit的更改 。 git cherry-pick命令通常用于将特定提交从存储库中的一个分支引入到另一个分支。 通常的用途是将提交从维护分支转发或反向移植到开发分支。

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

之前:

后:


#2楼

cherry-pick是一个Git功能。 如果有人想将一个分支中的特定提交落实到目标分支,则使用cherry-pick。
git cherry-pick步骤如下。

  1. 签出(切换到)目标分支。
  2.  git cherry-pick <commit id> 

    这里的提交ID是另一个分支的活动ID。

     git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f 
  3. 推送到目标分支

访问https://git-scm.com/docs/git-cherry-pick


#3楼

有点像复制(从某处)和粘贴(到某处),但是用于特定的提交。

例如,如果您想进行热修复,则可以使用“ cherry-pick功能。

做你的cherry-pick的开发分支,并merge该承诺发布分支。 同样,从发布分支到主分支进行cherry-pick 。 沃伊拉


#4楼

您可以考虑,如果选择的樱桃类似于重新设定,或者像重新设定一样进行管理。 我的意思是,它需要一个现有的提交,并以您当前所在分支的头作为起点来重新生成它。

rebase接受具有父X的提交,并像实际具有父Y一样重新生成该提交,这正是cherry-pick所做的。

Cherry Pick更多有关如何选择提交的信息。 使用pull (rebase),git会在被拉到分支的顶部隐式地重新生成本地提交,但是使用cherry-pick显式地选择一些提交,并在当前分支的顶部隐式地重新生成它们。

因此,您的操作方式有所不同,但是在幕后,它们是非常相似的操作-提交的重新生成。


#5楼

需要摘樱桃的情况的简短示例

考虑以下情形。 您有两个分支。

a)版本1-该分支将交付给您的客户,但仍有一些错误需要修复。

B) -经典主分支,在那里你可以为release2例如添加功能。

现在 :您可以在release1中修复某些问题 。 当然,您也需要在master中进行此修复。 这是樱桃采摘的典型用例。 因此,在这种情况下选择樱桃意味着您从release1分支中进行提交,并将其包括在master分支中。


#6楼

当您与项目团队的开发人员一起工作时,管理多个git分支之间的更改可能会成为一项复杂的任务。 有时,您不想将整个分支合并到另一个分支中,只需要选择一个或两个特定的提交即可。 此过程称为“樱桃采摘”。

在关于采摘樱桃的文章中找到了很棒的文章,请查看其详细信息: https : //www.previousnext.com.au/blog/intro-cherry-picking-git


#7楼

如果要合并而没有提交ID,则可以使用此命令

git cherry-pick master~2 master~0

上面的命令将从1到3合并master的最后三个提交

如果要对单个提交执行此操作,只需删除最后一个选项

git cherry-pick master~2

这样,您将合并master末尾的第3次提交。


#8楼

我准备了分步演示的插图, 摘樱桃也做了这些动画的插图 (接近尾声)。

  1. 摘樱桃之前
    (我们将从分支feature中对提交L 进行挑选 ):

  1. 启动命令git cherry-pick feature~2
    feature~2是之前的第二次提交
    feature ,即提交L ):

  1. 执行命令后( git cherry-pick feature~2 ):

相同的动画:


注意:

从用户的角度来看 ,提交L' (提交=快照)是提交L的确切副本。
从技术上(内部)来说,这是一个新的不同的提交(因为例如L包含指向K指针,而L'包含指向E指针)。


#9楼

它将对当前分支应用特定的提交。

这意味着 :

  • 此提交添加的所有文件将被添加
  • 此提交删除的所有文件都将被删除
  • 此提交修改的所有文件将被合并。 这意味着提交中的整个文件 ,而不仅仅是此提交中的更改

例如:考虑提交A

added newFileA
modified main:
+ import './newFileA'

提交B

added newFileB
modified main:
+ import './newFileB'

如果您在另一个分支上选择提交B ,您将得到:

/newFileB
/main :import './newFileA'import './newFileB'

因为犯B包含newFileB ,但没有newFileA,造成了错误,所以请谨慎使用。


#10楼

Git中的Cherry picking旨在将某个分支中的某些提交应用于另一分支。 如果您愿意,可以做到。 犯了一个错误,并将更改更改为错误的分支,但是不想合并整个分支。 您可以例如。 恢复提交,然后在另一个分支上进行选择。

要使用它,您只需要git cherry-pick hash ,其中hash是来自其他分支的提交哈希。

有关完整过程,请参阅: http : //technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html


#11楼

在Git中进行Cherry采摘意味着从一个分支中选择一个提交,然后将其应用于另一个分支。

这与其他方式如对比度mergerebase通常应用于许多提交到另一个分支。

  1. 确保您位于要应用提交的分支上。

     git checkout master 
  2. 执行以下命令:

     git cherry-pick <commit-hash> 

注意:

  1. 如果您是从公共分支机构摘樱桃,则应考虑使用

     git cherry-pick -x <commit-hash> 

    这将生成标准化的提交消息。 这样,您(和您的同事)仍然可以跟踪提交的来源,并可以避免将来发生合并冲突。

  2. 如果您在提交内容上附加了笔记,则不要遵循这些提示。 要将它们也带过来,您必须使用:

     git notes copy <from> <to> 

附加链接:

  • git官方指南页

选择与Git进行提交意味着什么?相关推荐

  1. 45个git命令提交

    01.我刚才提交了什么? 如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容.你就可以用下面的命令显示当前HEAD上的最近一次的提交(commi ...

  2. 如何修改git已提交记录的邮箱?

    有时候,公司提交的代码必须使用公司邮箱,而你误操作,直接把自己个人邮箱提交上去了,此时你就会遇到这样的需求:如何修改git已提交的邮箱? 而这个需求对于新手来说,往往要花费半天的时间才能理解修改过程, ...

  3. 向git库提交代码出现”There are no staged files怎么办?

    1.选择菜单"Window"->"Preference" 2.左边树菜单选择"Team"->"Git"-&g ...

  4. Git忽略提交规则 - .gitignore配置运维总结

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交.简单来说一个场景:在你使用git add .的时候,遇到 ...

  5. GIT无法提交到码云。原因可能是所在提交位置不对

    用git提交的时候,没有提交的按钮是因为有没有创建版本库(.git),一定要有版本库.需要在码云上克隆下来的版本库文件夹(.git)内部才能右键添加提交 选择在git clone的文件下,点击右键才可 ...

  6. 修改 Git 已经提交记录的 用户名 和邮箱

    修改 Git 已经提交记录的 用户名 和邮箱 有关 Git 和版本控制的常见问题. 如何更改提交的作者姓名/电子邮件? 在我们进入解决方案之前,让我们找出您到底想要完成什么: 在提交之前更改作者信息 ...

  7. git push提交成功后如何撤销回退

    https://blog.csdn.net/guozhaohui628/article/details/78922946 阅读数:1877 1.写在前面    我们在使用Git进行版本控制时,有可能会 ...

  8. git 怎么提交开源_第一次提交时就爱开源

    git 怎么提交开源 学习的力量,改变的自由以及创新的动力. 关于开源软件,有什么不值得爱的? 开源世界由一群热情奔放的个人组成,他们在自己的巢穴中乱砍,对编程的未来抱有相同的愿景:开放性和协作性. ...

  9. Git已提交代码,强行回退,覆盖曾提交过得代码(删除提交记录)

    工具:SourceTree git版本控制 第一步:选择想要回退提交的地方,回滚 直接确定:无需其他操作 此时:回到了当前提交的状态(文件该储藏,该丢弃,自己选择):我这里是直接储藏(因为提交错分支了 ...

最新文章

  1. selenium之如何等待页面元素加载完成
  2. 实战Nginx与PHP(FastCGI)的安装、配置与优化
  3. 视频会说话:神策智能运营,让你半小时搞定一次活动!
  4. 您需要了解的几个XHTML标签
  5. 正则表达式(Java版整理)
  6. SAP OData service的执行是如何从Gateway系统转交到backend系统
  7. python内点法_Python_Day_02 str内部方法总结
  8. quartus怎么仿真波形_单相半波可控整流电路电阻负载的Matlab Simulink仿真
  9. centos 虚拟机glibc升级_分享Centos6.5升级glibc过程
  10. leetcode 477. 汉明距离总和(位运算)
  11. 给地球上的22.8万种植物建立图像索引
  12. Javascript学习数据结构--字典
  13. 我的世界服务器拔刀修复,我的世界拔刀剑怎么修复
  14. es6学习笔记-顶层对象_v1.0_byKL
  15. Centos 部署.net Core
  16. mysql 用户列表数据结构_MySQL数据结构-行结构
  17. Boost-IO学习 异步数据处理Simple(转)
  18. 解决在宝塔面板IIS服务器上部署svg/woff/woff2字体的问题
  19. intel 显卡使用cuda吗
  20. SpringBoot初学笔记(SpringBoot实战之数据库相关操作)

热门文章

  1. mybatis_SQL映射(2)
  2. [常微分方程]Lecture 2: 欧拉数值方法及推广
  3. leetcode-longestPalindrome-java
  4. ASP.NET AJAX Programmer's Reference : with ASP.NET 2.0 or ASP.NET 3.5
  5. nginx访问静态文件
  6. Python办公自动化(七)|自动更新不对称表格
  7. ll命令报错-bash: ll: command not found
  8. DevOps使用到的工具・术语
  9. Excel中 对「对话气泡(吹き出し)」中的文字添加删除线 等操作
  10. Excel中数据透视表的 使用 创建(ピポットテーブル)