通过这个简单的示例,学习如何git-pick一个提交
git cherry-pick是最常见的版本控制命令之一,这实在令人遗憾,因为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 [email protected]{0}: commit: all deleted: 0 files e6f1ac7 [email protected]{1}: commit: 5th commit: 5 files 2792e62 [email protected]{2}: commit: 4th commit: 4 files 60699ba [email protected]{3}: commit: 3rd commit: 3 files 4ece4c7 [email protected]{4}: commit: 2nd commit: 2 files cc6b274 [email protected]{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 commit
还应注意,更新的不仅仅是工作树。 当您git-cherry-pick一个提交时,将在分支上创建一个全新的提交,如以下reflog命令所示:
/c/ git cherry-pick tutorial (master) $ git reflog eba7975 [email protected]{0}: cherry-pick: 3rd commit: 3 files 189aa32 [email protected]{1}: commit: all deleted: 0 files e6f1ac7 [email protected]{2}: commit: 5th commit: 5 files 2792e62 [email protected]{3}: commit: 4th commit: 4 files 60699ba [email protected]{4}: commit: 3rd commit: 3 files 4ece4c7 [email protected]{5}: commit: 2nd commit: 2 files cc6b274 [email protected]{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的辩论