這篇文章主要介紹“什么是 Git 遴選”,在日常操作中,相信很多人在什么是 Git 遴選問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是 Git 遴選”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
成都創(chuàng)新互聯(lián)專注于康平企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)??灯骄W(wǎng)站建設(shè)公司,為康平等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
了解
git cherry-pick
命令是什么,為什么用以及如何使用。
當你和一群程序員一起工作時,無論項目大小,處理多個 Git 分支之間的變更都會變得很困難。有時,你不想將整個 Git 分支合并到另一個分支,而是想選擇并移動幾個特定的提交。這個過程被稱為 “遴選”。4
本文將介紹“遴選”是什么、為何使用以及如何使用。
那么讓我們開始吧。
使用遴選(cherry-pick
)命令,Git 可以讓你將任何分支中的個別提交合并到你當前的 Git HEAD 分支中。
當執(zhí)行 git merge
或者 git rebase
時,一個分支的所有提交都會被合并。cherry-pick
命令允許你選擇單個提交進行整合。
下面的情況可能會讓你更容易理解遴選功能。
想象一下,你正在為即將到來的每周沖刺實現(xiàn)新功能。當你的代碼準備好了,你會把它推送到遠程分支,準備進行測試。
然而,客戶并不是對所有修改都滿意,要求你只呈現(xiàn)某些修改。因為客戶還沒有批準下次發(fā)布的所有修改,所以 git rebase
不會有預(yù)期的結(jié)果。為什么會這樣?因為 git rebase
或者 git merge
會把上一個沖刺的每一個調(diào)整都納入其中。
遴選就是答案!因為它只關(guān)注在提交中添加的變更,所以遴選只會帶入批準的變更,而不添加其他的提交。
還有其他幾個原因可以使用遴選:
這對于 bug 修復(fù)是必不可少的,因為 bug 是出現(xiàn)在開發(fā)分支中對應(yīng)的提交的。
你可以通過使用 git cherry-pick
來避免不必要的工作,而不用使用其他選項例如 git diff
來應(yīng)用特定變更。
如果因為不同 Git 分支的版本不兼容而無法將整個分支聯(lián)合起來,那么它是一個很有用的工具。
在 cherry-pick
命令的最簡單形式中,你只需使用 SHA 標識符來表示你想整合到當前 HEAD 分支的提交。
要獲得提交的哈希值,可以使用 git log
命令:
$ git log --oneline
當你知道了提交的哈希值后,你就可以使用 cherry-pick
命令。
語法是:
$ git cherry-pick
例如:
$ git cherry-pick 65be1e5
這將會把指定的修改合并到當前已簽出的分支上。
如果你想做進一步的修改,也可以讓 Git 將提交的變更內(nèi)容添加到你的工作副本中。
語法是:
$ git cherry-pick--no-commit
例如:
$ git cherry-pick 65be1e5 --no-commit
如果你想同時選擇多個提交,請將它們的提交哈希值用空格隔開:
$ git cherry-pick hash2 hash4
當遴選提交時,你不能使用 git pull
命令,因為它能獲取一個倉庫的提交并自動合并到另一個倉庫。cherry-pick
是一個專門不這么做的工具;另一方面,你可以使用 git fetch
,它可以獲取提交,但不應(yīng)用它們。毫無疑問,git pull
很方便,但它不精確。
要嘗試這個過程,啟動終端并生成一個示例項目:
$ 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)在,通過創(chuàng)建一個項目的復(fù)刻來代表一個遠程開發(fā)者:
$ mkdir ~/fruit.fork$ cd !$$ echo "Strawberry" >> fruit.txt$ git add fruit.txt$ git commit -m 'Added a fruit"
這是一個有效的提交。現(xiàn)在,創(chuàng)建一個不好的提交,代表你不想合并到你的項目中的東西:
$ echo "Rhubarb" >> fruit.txt$ git add fruit.txt$ git commit -m 'Added a vegetable that tastes like a fruit"
返回你的倉庫,從你的假想的開發(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)從你想象中的開發(fā)者那里獲取了提交的內(nèi)容,但你還沒有將它們合并到你的版本庫中。你想接受第二個提交,但不想接受第三個提交,所以使用 cherry-pick
。
$ git cherry-pick 0664292
第二次提交現(xiàn)在在你的倉庫里了:
$ cat fruit.txtKiwifruitStrawberry
將你的更改推送到遠程服務(wù)器上,這就完成了!
在開發(fā)者社區(qū)中,通常不鼓勵所以遴選。主要原因是它會造成重復(fù)提交,而你也失去了跟蹤你的提交歷史的能力。
如果你不按順序地遴選了大量的提交,這些提交會被記錄在你的分支中,這可能會在 Git 分支中導(dǎo)致不理想的結(jié)果。
遴選是一個強大的命令,如果沒有正確理解可能發(fā)生的情況,它可能會導(dǎo)致問題。不過,當你搞砸了,提交到錯誤的分支時,它可能會救你一命(至少是你當天的工作)。
到此,關(guān)于“什么是 Git 遴選”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享標題:什么是Git遴選
URL地址:http://weahome.cn/article/pcsdhd.html