git cherry-pick:挑選指定commit來合併

前言

在咱們使用Git進行平常開發的過程當中,經常須要進行的操做就是代碼合併了。常見的操作命令是 git merge branch-name,這個命令會合並的是整個分支的commit,然而有時候咱們須要的多是僅僅某一個 commit或者某幾個commit,這時候就須要用到git cherry-pick了。git

git cherry-pick的做用就如它的名字同樣,精心挑選。咱們能夠精心挑選其餘分支上的 commit 合併到當前的分支上來。shell

原理

git cherry-pick 能夠把其餘分支的某個commit應用到當前分支,而且自動生成一個新的 commit 進行提交,所以這兩次commit的哈希值是不同的,屬於不一樣的commitsegmentfault

基本用法

單個commit合併ui

git cherry-pick commit-hash/branch-name

若是使用的是哈希值,則會把對應的commit合併過來,若是是分支名,則會把對應分支的最新一次commit合併過來。spa

多個commit合併code

# 一、 分散的commit
git cherry-pick commit-hash1 commit-hash2

# 二、連續的commit
# Git 1.7.2 版本之後,新增了支持批量cherry-pick 
# 能夠將一個連續的時間序列內的連續commit,進行cherry-pick操做。

# 合併(start,end]之間的提交,不包含start
git cherry-pick start-commit-hash..end-commit-hash 

# 合併[start,end]之間的提交,包含start
git cherry-pick start-commit-hash^..end-commit-hash

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

如何處理衝突

代碼合併不可避免的就是會遇到代碼衝突了,git merge會遇到衝突,一樣的git cherry-pick也會遇到代碼衝突,那麼遇到代碼衝突的時候,該如何處理呢?圖片

遇到衝突的時候,Git會給出報錯信息,並停下來,要求用戶解決 conflict 的問題。Git會把全部衝突的文件列在Unmerged paths的地方,能夠經過git status查看,以下圖。
在這裏插入圖片描述
此時咱們有如下處理方案:開發

  • 解決衝突rem

    • 修改衝突的地方,並經過命令git add .把文件從新加入暫存區。
    • 繼續合併,git cherry-pick --continue
  • 回退全部修改:git cherry-pick --abort,此時會回到操做前的樣子
  • 單純退出cherry-pickgit cherry-pick --quit,此時不會回到操做前的狀態

經常使用配置項

-e:修改提交信息,若是不修改,則使用合併過來的commit的提交信息
-x:標記來源commit,會在提交信息裏標記來源的commit哈希,方便之後追查。
-n:只修改工做區和暫存區的代碼,而不產生新的commit。這時候能夠本身提交或者作其餘修改後提交

Enjoy it !

版權聲明

轉載請註明做者和文章出處
做者: X先生
http://www.javashuo.com/article/p-sldbzkte-mh.html
相關文章
相關標籤/搜索