什么是 Git 遴选
这篇文章主要介绍“什么是 Git 遴选”,在日常操作中,相信很多人在什么是 Git 遴选问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是 Git 遴选”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
了解
git cherry-pick
命令是什么,为什么用以及如何使用。
当你和一群程序员一起工作时,无论项目大小,处理多个 Git 分支之间的变更都会变得很困难。有时,你不想将整个 Git 分支合并到另一个分支,而是想选择并移动几个特定的提交。这个过程被称为 “遴选”。4
本文将介绍“遴选”是什么、为何使用以及如何使用。
那么让我们开始吧。
什么是遴选?
使用遴选(cherry-pick
)命令,Git 可以让你将任何分支中的个别提交合并到你当前的Git HEAD分支中。
当执行git merge
或者git rebase
时,一个分支的所有提交都会被合并。cherry-pick
命令允许你选择单个提交进行整合。
遴选的好处
下面的情况可能会让你更容易理解遴选功能。
想象一下,你正在为即将到来的每周冲刺实现新功能。当你的代码准备好了,你会把它推送到远程分支,准备进行测试。
然而,客户并不是对所有修改都满意,要求你只呈现某些修改。因为客户还没有批准下次发布的所有修改,所以git rebase
不会有预期的结果。为什么会这样?因为git rebase
或者git merge
会把上一个冲刺的每一个调整都纳入其中。
遴选就是答案!因为它只关注在提交中添加的变更,所以遴选只会带入批准的变更,而不添加其他的提交。
还有其他几个原因可以使用遴选:
这对于 bug 修复是必不可少的,因为 bug 是出现在开发分支中对应的提交的。
你可以通过使用
git cherry-pick
来避免不必要的工作,而不用使用其他选项例如git diff
来应用特定变更。如果因为不同 Git 分支的版本不兼容而无法将整个分支联合起来,那么它是一个很有用的工具。
使用 cherry-pick 命令
在cherry-pick
命令的最简单形式中,你只需使用SHA标识符来表示你想整合到当前 HEAD 分支的提交。
要获得提交的哈希值,可以使用git log
命令:
$gitlog--oneline
当你知道了提交的哈希值后,你就可以使用cherry-pick
命令。
语法是:
$gitcherry-pick<commitsha>
例如:
$gitcherry-pick65be1e5
这将会把指定的修改合并到当前已签出的分支上。
如果你想做进一步的修改,也可以让 Git 将提交的变更内容添加到你的工作副本中。
语法是:
$gitcherry-pick<commitsha>--no-commit
例如:
$gitcherry-pick65be1e5--no-commit
如果你想同时选择多个提交,请将它们的提交哈希值用空格隔开:
$gitcherry-pickhash2hash4
当遴选提交时,你不能使用git pull
命令,因为它能获取一个仓库的提交并自动合并到另一个仓库。cherry-pick
是一个专门不这么做的工具;另一方面,你可以使用git fetch
,它可以获取提交,但不应用它们。毫无疑问,git pull
很方便,但它不精确。
自己尝试
要尝试这个过程,启动终端并生成一个示例项目:
$mkdirfruit.git$cdfruit.git$gitinit.
创建一些数据并提交:
$echo"Kiwifruit">fruit.txt$gitaddfruit.txt$gitcommit-m'Firstcommit'
现在,通过创建一个项目的复刻来代表一个远程开发者:
$mkdir~/fruit.fork$cd!$$echo"Strawberry">>fruit.txt$gitaddfruit.txt$gitcommit-m'Addedafruit"
这是一个有效的提交。现在,创建一个不好的提交,代表你不想合并到你的项目中的东西:
$echo"Rhubarb">>fruit.txt$gitaddfruit.txt$gitcommit-m'Addedavegetablethattasteslikeafruit"
返回你的仓库,从你的假想的开发者那里获取提交的内容:
$cd~/fruit.git$gitremoteadddev~/fruit.fork$gitfetchdevremote:Countingobjects:6,done.remote:Compressingobjects:100%(2/2),done.remote:Total6(delta0),reused0(delta0)Unpackingobjects:100%(6/6),done...
$gitlog–onelinedev/mastere858ab2Addedavegetablethattasteslikeafruit0664292Addedafruitb56e0f8Firstcommit
你已经从你想象中的开发者那里获取了提交的内容,但你还没有将它们合并到你的版本库中。你想接受第二个提交,但不想接受第三个提交,所以使用cherry-pick
。
$gitcherry-pick0664292
第二次提交现在在你的仓库里了:
$catfruit.txtKiwifruitStrawberry
将你的更改推送到远程服务器上,这就完成了!
避免使用遴选的原因
在开发者社区中,通常不鼓励所以遴选。主要原因是它会造成重复提交,而你也失去了跟踪你的提交历史的能力。
如果你不按顺序地遴选了大量的提交,这些提交会被记录在你的分支中,这可能会在 Git 分支中导致不理想的结果。
遴选是一个强大的命令,如果没有正确理解可能发生的情况,它可能会导致问题。不过,当你搞砸了,提交到错误的分支时,它可能会救你一命(至少是你当天的工作)。
到此,关于“什么是 Git 遴选”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!
推荐阅读
-
PHP Web开发框架Laravel安装指南
-
将 node_modules 目录放入 Git 仓库的优点
推荐一篇文章Whyyoushouldcheck-inyournodedependencies[1]...
-
Jenkins发布PHP项目之一自动化部署
-
git init和git clone获取git仓库的方法
-
Git与SVN的区别是什么
-
Git常用的基本操作命令有哪些
Git常用的基本操作命令有哪些这篇文章给大家分享的是有关Git常用...
-
git怎么使用
git怎么使用这篇文章主要为大家展示了“git怎么使用”,内容简而...
-
Git如何将几个commit压缩成一个
-
Git如何找回丢失的commit节点或分支
-
Git如何获得一个干净的工作空间