新聞中心
[[393148]]
十余年的黔西網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整黔西建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“黔西網(wǎng)站設(shè)計(jì)”,“黔西網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
了解
git cherry-pick命令是什么,為什么用以及如何使用。
當(dāng)你和一群程序員一起工作時(shí),無(wú)論項(xiàng)目大小,處理多個(gè) Git 分支之間的變更都會(huì)變得很困難。有時(shí),你不想將整個(gè) Git 分支合并到另一個(gè)分支,而是想選擇并移動(dòng)幾個(gè)特定的提交。這個(gè)過(guò)程被稱(chēng)為 “遴選cherry-pick”。4
本文將介紹“遴選”是什么、為何使用以及如何使用。
那么讓我們開(kāi)始吧。
什么是遴選?
使用遴選(cherry-pick)命令,Git 可以讓你將任何分支中的個(gè)別提交合并到你當(dāng)前的 Git HEAD 分支中。
當(dāng)執(zhí)行 git merge 或者 git rebase 時(shí),一個(gè)分支的所有提交都會(huì)被合并。cherry-pick 命令允許你選擇單個(gè)提交進(jìn)行整合。
遴選的好處
下面的情況可能會(huì)讓你更容易理解遴選功能。
想象一下,你正在為即將到來(lái)的每周沖刺實(shí)現(xiàn)新功能。當(dāng)你的代碼準(zhǔn)備好了,你會(huì)把它推送到遠(yuǎn)程分支,準(zhǔn)備進(jìn)行測(cè)試。
然而,客戶(hù)并不是對(duì)所有修改都滿(mǎn)意,要求你只呈現(xiàn)某些修改。因?yàn)榭蛻?hù)還沒(méi)有批準(zhǔn)下次發(fā)布的所有修改,所以 git rebase 不會(huì)有預(yù)期的結(jié)果。為什么會(huì)這樣?因?yàn)?nbsp;git rebase 或者 git merge 會(huì)把上一個(gè)沖刺的每一個(gè)調(diào)整都納入其中。
遴選就是答案!因?yàn)樗魂P(guān)注在提交中添加的變更,所以遴選只會(huì)帶入批準(zhǔn)的變更,而不添加其他的提交。
還有其他幾個(gè)原因可以使用遴選:
- 這對(duì)于 bug 修復(fù)是必不可少的,因?yàn)?bug 是出現(xiàn)在開(kāi)發(fā)分支中對(duì)應(yīng)的提交的。
- 你可以通過(guò)使用
git cherry-pick來(lái)避免不必要的工作,而不用使用其他選項(xiàng)例如git diff來(lái)應(yīng)用特定變更。 - 如果因?yàn)椴煌?Git 分支的版本不兼容而無(wú)法將整個(gè)分支聯(lián)合起來(lái),那么它是一個(gè)很有用的工具。
使用 cherry-pick 命令
在 cherry-pick 命令的最簡(jiǎn)單形式中,你只需使用 SHA 標(biāo)識(shí)符來(lái)表示你想整合到當(dāng)前 HEAD 分支的提交。
要獲得提交的哈希值,可以使用 git log 命令:
$ git log --oneline
當(dāng)你知道了提交的哈希值后,你就可以使用 cherry-pick 命令。
語(yǔ)法是:
$ git cherry-pick
例如:
$ git cherry-pick 65be1e5
這將會(huì)把指定的修改合并到當(dāng)前已簽出的分支上。
如果你想做進(jìn)一步的修改,也可以讓 Git 將提交的變更內(nèi)容添加到你的工作副本中。
語(yǔ)法是:
$ git cherry-pick--no-commit
例如:
$ git cherry-pick 65be1e5 --no-commit
如果你想同時(shí)選擇多個(gè)提交,請(qǐng)將它們的提交哈希值用空格隔開(kāi):
$ git cherry-pick hash1 hash3
當(dāng)遴選提交時(shí),你不能使用 git pull 命令,因?yàn)樗塬@取一個(gè)倉(cāng)庫(kù)的提交并自動(dòng)合并到另一個(gè)倉(cāng)庫(kù)。cherry-pick 是一個(gè)專(zhuān)門(mén)不這么做的工具;另一方面,你可以使用 git fetch,它可以獲取提交,但不應(yīng)用它們。毫無(wú)疑問(wèn),git pull 很方便,但它不精確。
自己嘗試
要嘗試這個(gè)過(guò)程,啟動(dòng)終端并生成一個(gè)示例項(xiàng)目:
$ mkdir fruit.git$ cd fruit.git$ git init .
創(chuàng)建一些數(shù)據(jù)并提交:
$ echo "Kiwifruit" > fruit.txt$ git add fruit.txt$ git commit -m 'First commit'
現(xiàn)在,通過(guò)創(chuàng)建一個(gè)項(xiàng)目的復(fù)刻來(lái)代表一個(gè)遠(yuǎn)程開(kāi)發(fā)者:
$ mkdir ~/fruit.fork$ cd !$$ echo "Strawberry" >> fruit.txt$ git add fruit.txt$ git commit -m 'Added a fruit"
這是一個(gè)有效的提交?,F(xiàn)在,創(chuàng)建一個(gè)不好的提交,代表你不想合并到你的項(xiàng)目中的東西:
$ echo "Rhubarb" >> fruit.txt$ git add fruit.txt$ git commit -m 'Added a vegetable that tastes like a fruit"
返回你的倉(cāng)庫(kù),從你的假想的開(kāi)發(fā)者那里獲取提交的內(nèi)容:
$ cd ~/fruit.git$ git remote add dev ~/fruit.fork$ git fetch devremote: Counting objects: 6, done.remote: Compressing objects: 100% (2/2), done.remote: Total 6 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (6/6), done...
$ git log –oneline dev/mastere858ab2 Added a vegetable that tastes like a fruit0664292 Added a fruitb56e0f8 First commit
你已經(jīng)從你想象中的開(kāi)發(fā)者那里獲取了提交的內(nèi)容,但你還沒(méi)有將它們合并到你的版本庫(kù)中。你想接受第二個(gè)提交,但不想接受第三個(gè)提交,所以使用 cherry-pick。
$ git cherry-pick 0664292
第二次提交現(xiàn)在在你的倉(cāng)庫(kù)里了:
$ cat fruit.txtKiwifruitStrawberry
將你的更改推送到遠(yuǎn)程服務(wù)器上,這就完成了!
避免使用遴選的原因
在開(kāi)發(fā)者社區(qū)中,通常不鼓勵(lì)所以遴選。主要原因是它會(huì)造成重復(fù)提交,而你也失去了跟蹤你的提交歷史的能力。
如果你不按順序地遴選了大量的提交,這些提交會(huì)被記錄在你的分支中,這可能會(huì)在 Git 分支中導(dǎo)致不理想的結(jié)果。
遴選是一個(gè)強(qiáng)大的命令,如果沒(méi)有正確理解可能發(fā)生的情況,它可能會(huì)導(dǎo)致問(wèn)題。不過(guò),當(dāng)你搞砸了,提交到錯(cuò)誤的分支時(shí),它可能會(huì)救你一命(至少是你當(dāng)天的工作)。
新聞標(biāo)題:什么是Git遴選(cherry-pick)?
網(wǎng)頁(yè)鏈接:http://m.5511xx.com/article/ccoscio.html


咨詢(xún)
建站咨詢(xún)

