先想想乙個情況,現在我們有乙個功能急需要發布到線上,但是這個功能相關的**所在的測試分(test)支有很多不應該發布的**,那麼這個時候我們就需要將與這個**相關的提交選擇性的合併到master上並發布。如果你還不知道git cherry-pick命令的話,很有可能你會從master分支上檢出乙個新分支,然後在把相關的**copy到新分支上然後再合併回master。當然這麼做確實可以達到最終的目的,但是手動copy很容易遺漏某些東西,那麼我們這篇文章就來講解一下git cherry-pick命令。
1.準備乙個空的git倉庫,並建立乙個readme檔案然後提交。
mkdir git-test
cd git-test
git init
touch readme.md
git add readme.md
git commit -m "第一次提交"
2.基於master建立乙個新的分支dev
git checkout -b dev
3.修改兩次readme.md檔案,並commit兩次。執行git log後我們會看到如下內容:
$ git log
commit cc04beabf0678f54bf64635bd56160c78b0aa1e6 (head -> dev)
author: **無止境 date: mon jun 17 18:35:44 2019 +0800
第三次提交
commit 32259aa35d0702d2d05c648938798f9a5bd4b9e7
author: **無止境 date: mon jun 17 18:35:23 2019 +0800
第二次提交
commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b (master)
author: **無止境 date: mon jun 17 18:34:09 2019 +0800
第一次提交
經過上面的步驟乙個git cherry-pick的使用場景就已經被我們模擬出來了。假如說我們現在dev上的第二次提交就是我們現在急需要發布的功能,那麼我們就需要使用git cherry-pick命令將這次提交合併到master分支上。
1.在dev分支上執行git log命令,找到目標commit的commitid.
2.切換到master分支
git checkout master
3.執行git cherry-pick命令
git cherry-pick 32259aa35d0702d2d05c648938798f9a5bd4b9e7
4.再次執行git log命令就可以看到目標提交已經被合併到master上了
$ git log
commit 845d18e1193e4ad4361c8065173ed9b96fcc5227 (head -> master)
author: **無止境 date: mon jun 17 18:35:23 2019 +0800
第二次提交
commit e7f478807d478a0c3e0af8659e0733a9d5b32c8b
author: **無止境 date: mon jun 17 18:34:09 2019 +0800
第一次提交
上面只是git cherry-pick命令的簡單用法,其實這個命令還提供了不少的引數。
git cherry-pick ...
常用options:
--quit 退出當前的chery-pick序列
--continue 繼續當前的chery-pick序列
--abort 取消當前的chery-pick序列,恢復當前分支
-n, --no-commit 不自動提交
-e, --edit 編輯提交資訊
如果我們執行git cherry-pick合併之後發生了衝突,這個時候git會自動幫我們新建乙個分支,如下所示:
mingw64 ~/desktop/p/write/筆記/git-test (master|cherry-picking)
如果我們想取消這次合併可以執行git cherry-pick --quit或者git cherry-pick --abort命令取消這次挑揀。
二者不同的地方在於前者會將當前分支中未衝突的內容狀態變為modified,
而後者則會直接將當前分支的內容回退到挑揀之前的狀態。當然如果我們也可以解決衝突之後執行如下命令繼續合併:
git add *
git cherry-pick --continue
後面的-n和-e,就比較容易理解了,-n就是挑揀後不會自動提交,需要我們執行git commit命令進行提交,而-e則是可以改變挑揀的message資訊。 Git使用小技巧之挑揀合併
先想想乙個情況,現在我們有乙個功能急需要發布到線上,但是這個功能相關的 所在的測試分 test 支有很多不應該發布的 那麼這個時候我們就需要將與這個 相關的提交選擇性的合併到master上並發布。如果你還不知道git cherry pick命令的話,很有可能你會從master分支上檢出乙個新分支,然...
git的使用小技巧
從遠端倉庫拉 至本地 先在本地新建資料夾 最好路徑不要出現中文字眼 調出命令列 cd到當前目錄 file clone with ssh的鏈結 前提已經配置好ssh git clone file 當前目錄即可拉取遠端倉庫的所有 本地push 至遠端倉庫 先git branch檢視下本地倉庫存在的所有分...
Git使用小技巧之回滾與撤銷詳解
前言 日常的開發,我們難免會建立錯誤的git提交記錄,整個時候git給我們提供了兩個命令來解決這個問題。乙個命令是git reset,另乙個是git revert。兩者有啥區別呢?兩者主要的區別是,git reset命令是回滾某次提交,被回滾的提交將不會出現在提交記錄中,而git revert命令是...