git cherry-pick
是一個 Git 命令答朋,用于將特定的提交(commit)應(yīng)用到當(dāng)前分支上然磷。這在需要從其他分支中挑選某些提交到當(dāng)前分支時非常有用翠肘,例如當(dāng)你需要修復(fù)一個 bug腰素,但想只應(yīng)用特定的變更芦倒,而不是整個分支的內(nèi)容蛤织。
使用 git cherry-pick
的步驟
-
找到提交的哈希值:
-
首先赴叹,找到你想要應(yīng)用的提交的哈希值(通常是前幾位即可)。你可以通過以下命令查看提交記錄:
git log
這會顯示提交歷史指蚜,其中每個提交都有一個唯一的哈希值乞巧。
-
-
運(yùn)行
git cherry-pick
:-
將特定提交應(yīng)用到當(dāng)前分支,使用以下命令:
git cherry-pick <commit-hash>
-
例如:
git cherry-pick a1b2c3d4
這會將哈希值為
a1b2c3d4
的提交應(yīng)用到當(dāng)前分支上姚炕。
-
多個提交
如果你想要應(yīng)用多個提交摊欠,可以用空格分隔多個提交的哈希值:
git cherry-pick a1b2c3d4 e5f6g7h8
范圍選擇提交
你也可以挑選一個范圍內(nèi)的多個提交:
git cherry-pick <start-commit-hash>^..<end-commit-hash>
這會將起始提交(不包括)之后到結(jié)束提交(包括)之間的所有提交都應(yīng)用到當(dāng)前分支。
解決沖突
在進(jìn)行 cherry-pick
時柱宦,可能會出現(xiàn)沖突些椒。遇到?jīng)_突時,Git 會暫停操作掸刊,允許你手動解決沖突免糕。解決沖突后,使用以下命令完成 cherry-pick
:
git add <resolved-files>
git cherry-pick --continue
如果你想要中止操作(放棄這次 cherry-pick),可以使用:
git cherry-pick --abort
常見場景
-
Bug 修復(fù):從
develop
分支中挑選一個 bug 修復(fù)石窑,應(yīng)用到main
分支上牌芋。 - 挑選特定功能:從一個功能分支中挑選某些提交,而不是整個分支的內(nèi)容松逊。
使用 git cherry-pick
可以精確地控制哪些提交應(yīng)用到當(dāng)前分支上躺屁,從而靈活管理代碼變更。
git cherry-pick后如何撤銷
如果你使用 git cherry-pick
后想要撤銷剛剛的操作经宏,可以根據(jù)情況選擇合適的方式撤銷 cherry-pick
提交犀暑。
1. 使用 git reset
撤銷
如果你剛剛執(zhí)行了 git cherry-pick
,并且還沒有推送到遠(yuǎn)程倉庫烁兰,可以使用 git reset
來撤銷這個提交:
-
硬重置:
git reset --hard HEAD~1
這個命令將重置到上一個提交耐亏,刪除
cherry-pick
的結(jié)果,包括工作目錄的所有更改沪斟。這種方式會徹底撤銷cherry-pick
广辰,也會移除工作樹中的變更。 -
軟重置:
git reset --soft HEAD~1
這個命令只會撤銷提交主之,但保留更改在工作區(qū)中择吊,這樣你可以根據(jù)需要修改或重新提交。
2. 使用 git revert
撤銷
如果你已經(jīng)將 cherry-pick
提交推送到遠(yuǎn)程倉庫杀餐,可以使用 git revert
生成一個新的提交干发,用于撤銷 cherry-pick
提交:
git revert <commit-hash>
其中 <commit-hash>
是你想要撤銷的那個 cherry-pick
提交的哈希值。
3. 使用 git cherry-pick --abort
如果在 cherry-pick
的過程中發(fā)生沖突史翘,想要中止操作枉长,可以使用:
git cherry-pick --abort
這將終止當(dāng)前的 cherry-pick
操作并返回到 cherry-pick
之前的狀態(tài)。
總結(jié)
- 如果你剛剛完成
cherry-pick
并且想完全撤銷:使用git reset --hard HEAD~1
或git reset --soft HEAD~1
琼讽。 - 如果你已經(jīng)推送到遠(yuǎn)程倉庫:使用
git revert <commit-hash>
必峰。 - 如果還在
cherry-pick
過程中,遇到?jīng)_突并想中止:使用git cherry-pick --abort
钻蹬。