Cherry-Pick | 一日一 Git

版權聲明:git

本帳號發佈文章均來自公衆號,承香墨影(cxmyDev),版權歸承香墨影全部。工具

未經容許,不得轉載。3d

1、前言

在實際工做開發中,會遵循標準的 Git Work flow,對待不一樣的功能,會切出不一樣的分支進行 coding,因此,基於什麼基準分支切出來的功能分支進行 coding,這是一個很重要的問題。版本控制

若是切錯了基準分支,你會發現可能最終開發完成以後, merge 不回去了。或者須要將某個分支上的 commit 代碼,移植到某個分支上面,就須要使用到 cherry-pick 這個 git 命令了。code

2、Git 的 Cherry-Pick

一、什麼是 Cherry-Pick

cherry-pick 是 Git 版本控制工具中的一個命令,和 commit 、pull 同樣,它只是一個命令。cdn

cherry-pick 和它的名稱同樣,精心挑選,挑選一個咱們須要的 commit 進行操做。它能夠用於將在其餘分支上的 commit 修改,移植到當前的分支。blog

一個很常見的場景,就是想在某個穩定版本上,添加一個剛開發完成的版本中的功能。就可使用 Cherry-pick 命令,將這個功能相關的 commit 提取出來,合入穩定版本的分支上。開發

二、如何使用 Cherry-Pick

Cherry-Pick 使用起來很是的簡單:it

git cherry-pick <commit-id>io

這裏操做的就是須要 cherry-pick 的 commit-id ,通常使用 Git 管理工具什麼的,均可以很方便的查看到,否者的話,可使用 git log 命令,查找咱們須要的 commit-id。

當執行完 cherry-pick 以後,將會自動生成一個新的 commit 進行提交,也就是會有一個新的 commit ID。

若是順利的話,就能夠正常提交了。若是遇到衝突,使用 git diff 解決衝突便可,工做中,不推薦手工解決衝突,最好仍是使用一些 diff 工具來處理,畢竟手工處理容易出錯。

三、Cherry-Pick 的高級用法

前面介紹的最簡單的 git cherry-pick 只是最簡單也是最經常使用的方法,正常來講,咱們直接使用最簡單的命令就能夠了,若是 commit 多了,無非就是多重複執行幾回而已,可是 cherry-pick 還有一些高級點的用法,這裏瞭解一下。

git cherry-pick -x <commit_id>

增長 -x 參數,表示保留原提交的做者信息進行提交。

在 Git 1.7.2 版本開始,新增了支持批量 cherry-pick ,就是能夠一次將一個連續的時間序列內的 commit ,設定一個開始和結束的 commit ,進行 cherry-pick 操做。

git cherry_pick <start-commit-id>…<end-commit-id>

能夠看到,它的範圍就是 start-commit-id 到 end-commit-id 之間全部的 commit,可是它這是一個 (左開,右閉] 的區間,也就是說,它將不會包含 start-commit-id 的 commit。

而若是想要包含 start-commit-id 的話,就須要使用 ^ 標記一下,就會變成一個 [左閉,右閉] 的區間,具體命令以下。

git cherry-pick <start-commit-id>^...<end-commit-id>

舉個例子來講明一下:

使用 git log —pretty=oneline 來查看當前分支最近的提交,注意 git 命令中,對於 commit-id 的操做,都只須要使用前五位就能夠了。

git cherry-pick 371c2…971209 // (2,5]

git cherry-pick 371c2^…971209 // [2,5]

三、注意事項

不管是對單個 commit 進行 cherry-pick ,仍是批量處理,注意必定要根據時間線,依照 commit 的前後順序來處理,否者會有意想不到的問題。

若是趕上衝突,最好不要手工解決衝突,仍是須要依賴工具來完成的,最簡單的就是 Android Studio 中爲咱們提供的一套簡單的 git 管理根據,接下來,就讓咱們看看在 Android Studio 中,如何使用 cherry-pick 吧。

3、AS 中的 Cherry-Pick

Android Studio 中,其實已經爲開發者提供了很是成熟的 Version Control 工具,通常使用快捷鍵 alt+9 打開。

在 Version Control 窗口中,能夠查看到全部的 commit log。

在這個窗口中,能夠看到一個很是直觀的 git log 的狀況,固然這是一個 git 管理工具的必備的,沒什麼好說道的。

若是想對某一次 commit 進行 cherry-pick 操做的話,找到這個 commit ,點擊右鍵。

選擇 Cherry-Pick 便可,一個櫻桃的 icon 。

順利的話,沒有衝突,就會出現一個 commit changes 的對話框,能夠直接提交當前的操做,而且 commit message 已經幫咱們寫好了,記錄清楚是從那個 commit 進行的 cherry-pick 操做。

若是不那麼順利,碰見了衝突,就須要咱們來處理衝突了,AS 其實也提供了很是直觀的處理衝突的 diff 工具,會先提示須要處理衝突。

這裏能夠點擊 Accept Yous 或者 Accept Theirs 來標記是使用你的代碼,仍是第三方合併過來的代碼。固然既然有衝突,一般咱們須要 點擊 merge 按鈕,本身來解決衝突。

最終,將代碼按咱們的預期 merge 以後,點擊 Apply 便可完成合並,同時生成個 commit 進行提交。

公衆號二維碼.jpg
相關文章
相關標籤/搜索