通过这个简单的示例,学习如何git-pick一个提交

git cherry-pick是最常见的版本控制命令之一,这实在令人遗憾,因为git cherry-pick提交功能是开发人员在尝试隔离软件错误或修复程序时可以采用的最有用的技能之一。破碎的建筑。

如何git cherry-pick一个提交。

图1.如果看到自己喜欢的提交,只需git cherry-pick即可。

什么是git cherry-pick ?

根据git的官方文档,“挑选”的目标是“ 应用某些现有commit引入的更改”。 本质上,挑选将查看存储库历史记录中的先前提交,并将先前提交的一部分更改应用于当前工作树 。 这个定义看似直截了当,但实际上,当有人尝试搅乱一个提交,甚至是从另一个分支挑剔时,到底发生了什么。 这个git cherry-pick示例将消除这种混乱。

git cherry-pick示例

我们将开始这个混帐樱桃挑一个完全干净的例子 ,该装置首先您将创建一个新的文件夹,我们将其命名为git的樱桃采摘教程,然后发出一个git init命令从内部它

/c/ git cherry-pick tutorial
$ git init
Initialized empty Git repository in C:/ git cherry-picktutorial/.git/ 

初始化git存储库后 ,创建五个html文件,每次创建文件时,都要执行一次提交。 在每个提交消息中,提交编号和工作树中的文件数将作为提交消息的一部分包括在内。 在随后的步骤中,我们挑选了一个提交,将选择这些提交步骤之一。

以下是创建五个按字母顺序排序的.html文件的命令,以及将每个文件独立添加到git索引并随后将这些文件提交到存储库所需的git命令:

/c/ git cherry-pick tutorial
$ echo 'alpha' > alpha.html
$ git add . | git commit -m "1st commit: 1 file"

$ echo 'beta' > beta.html
$ git add . | git commit -m "2nd commit: 2 files"

$ echo 'charlie' > charlie.html
$ git add . | git commit -m "3rd commit: 3 files"

$ echo 'whip it' > devo.html
$ git add . | git commit -m "4th commit: 4 files"

$ echo 'Big Lebowski' > eagles.html
$ git add . | git commit -m "5th commit: 5 files"

关于echo命令的注释

echo命令将用作文件创建快捷方式。 对于不熟悉此快捷方式的用户,先回显文本,然后在大于号后指定文件名,将使用该名称创建一个新文件,其中包含回显的文本。 因此下面的命令将创建一个名为agenda.html字一个新的文件DEVOPS它所包含:

$ echo 'devops' > agenda.html

在选择之前删除并提交

现在,我们将删除所有五个最近创建的文件,以清除工作目录。 在此也将需要后续提交。

/c/ git cherry-pick tutorial
$ rm *.html
$ git add . | git commit -m "all deleted: 0 files"

回顾一下,创建了五个文件,每个创建的文件都有一个对应的提交。 然后删除所有文件,并发出第六次提交。 可以在reflog中简洁地查看该提交历史的历史记录。 请特别注意第三次提交时的十六进制标识符,稍后我们将对此进行精选:

/c/ git cherry-pick tutorial
$ git reflog
189aa32 HEAD@{0}: commit: all deleted: 0 files
e6f1ac7 HEAD@{1}: commit: 5th commit:  5 files
2792e62 HEAD@{2}: commit: 4th commit:  4 files
60699ba HEAD@{3}: commit: 3rd commit:  3 files
4ece4c7 HEAD@{4}: commit: 2nd commit:  2 files
cc6b274 HEAD@{5}: commit: 1st commit:  1 file 

当我们git cherry-pick a commit时会发生什么?

这就是git cherry-pick示例开始变得有趣的地方。 我们需要git cherry-pick一个提交,所以让我们选择创建charlie.html文件的第三个提交。 但是,在执行此操作之前,请先问自己,在发出命令后您会相信什么。 当我们git cherry-pick一个提交时,我们是否将获得与该提交关联的所有文件,这意味着alpha.html,beta.html和charlie.html将返回? 还是我们只取回一个文件? 还是因为所有与提交相关联的文件都已从我们的工作空间中删除,所以尝试git-pick-pick提交的尝试会失败?

git cherry-pick命令

这是git cherry-pick提交号60699ba的命令:

/c/ git cherry-pick tutorial (master)
$ git cherry-pick 60699ba

[master eba7975] 3rd commit: 3 files
1 file changed, 1 insertion(+)
create mode 100644 charlie.html 

如您所见,只有一个文件被添加到工作目录,即charlie.html。 以前提交中添加到存储库的文件没有添加,这往往是许多用户的期望。 许多用户认为,当您对提交进行git cherry-pick选择时 ,属于该分支的所有文件(在提交时)都将被带入工作目录。 显然不是这样。 当您在git cherry-pick一个提交中时,只有与该提交相关联的更改才会重新应用到工作树中。

git cherry-pick命令

这是发行git cherry-pick进行提交时可用的各种选项。

一个隐藏的git cherry-pick commit

还应注意,更新的不仅仅是工作树。 当您git-cherry-pick一个提交时,将在分支上创建一个全新的提交,如以下reflog命令所示:

/c/ git cherry-pick tutorial (master)
$ git reflog
eba7975 HEAD@{0}: cherry-pick: 3rd commit: 3 files
189aa32 HEAD@{1}: commit: all deleted: 0 files
e6f1ac7 HEAD@{2}: commit: 5th commit: 5 files
2792e62 HEAD@{3}: commit: 4th commit: 4 files
60699ba HEAD@{4}: commit: 3rd commit: 3 files
4ece4c7 HEAD@{5}: commit: 2nd commit: 2 files
cc6b274 HEAD@{6}: commit (initial): 1st commit: 1 file 

当开发人员在存储库中遇到问题时,使用git cherry-pick commit的功能对于修复bug和解决GitHub中的问题非常有帮助,这就是为什么理解该命令的工作方式以及对当前开发的影响的原因。分支至关重要。 希望通过掌握这个git cherry-pick示例,您将有信心使用该命令来解决您自己的开发环境中的问题。

进一步提高您的DevOps工具知识

掌握Git? DevOps旅程的下一步是掌握Jenkins CI。 这里有一些很棒的Jenkins教程,它们将带您从初学者到专家。

第1步-如何下载,配置和安装Jenkins教程

第2步-创建您的第一个Jenkins自由式构建作业示例

步骤3 —从Shell脚本中的Jenkins环境变量列表中提取

步骤4 —修复常见的Jenkins插件安装错误

第5步—将String和Boolean Jenkins参数添加到构建中

第6步– 使用Jenkins Git插件从GitHub开始

第7步-当您git硬复位并推动时会发生什么?

第8步-了解詹金斯与Maven的辩论

第9步-了解如何在提交时执行硬git重置

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Need-to-git-cherry-pick-a-commit-Heres-an-example-how

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值