事情起因:迭代結(jié)束后進行代碼審查,我直接在本次已經(jīng)結(jié)束的開發(fā)分支branch-1.3.1上對代碼進行了優(yōu)化,且本地commit了幾次,后發(fā)現(xiàn)一些路由命名與文件不符,進行修改;
當前需求:支隊最后一次commit的文件push即router/index.js;
初始思路:以為和svn一樣,只要在當前文件夾下就只提交當前文件,結(jié)果將之前所有優(yōu)化的內(nèi)容都進行了提交。
出現(xiàn)的問題:導致了已經(jīng)完結(jié)的分支branch-1.3.1的不純潔性和不確定性;
解決方案:摘櫻桃 cherry-pick
第一步:首先在當前本地的branch-1.3.1基礎上創(chuàng)建一個新的分支,保存當前代碼
git checkout branch-v1.3.1copy

第二步:將分支branch-v1.3.1回滾到當前迭代的版本
git reset --hard 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96

到此為止分支branch-v1.3.1已經(jīng)與遠程保持一致
結(jié)果接下來進行了腦殘行為進行了第三步
第三步:將之前優(yōu)化的版本進行摘櫻桃到branch-v1.3.1
切換到branch-v1.3.1分支,然后將branch-v1.3.1copy中優(yōu)化的版本哈希值拷貝即實現(xiàn)摘櫻桃
git cherry-pick 42249fd7ce9e83f154f48afb5d416e75f0b408ba

摘櫻桃具體用法如下
//合并一次提交
git checkout B分支
git cherry-pick A的某次提交的哈希值(git log 可以看)
//如果合并A分支最近一次的提交也可以
git cherry-pick A
//合并多個提交
git cherry-pick A1 A2 //A1 A2是提交的哈希值(git log 可以看)
或
git cherry-pick A1.. A3 //從A1到A3都合并過來,不包含A1
或
git cherry-pick A1 ..A3 //包含A1
//其他命令
1、發(fā)生沖突后放棄合并,回到操作之前的狀態(tài)
git cherry-pick abort
2、發(fā)生沖突后,退出cherry-pick 但不回到操作之前的狀態(tài)
git cherry-pick --quit
第三步純粹是走了回頭路,我需要提交的內(nèi)容依然無法提交
最終又重新回到起點,將branch-v1.3.1進行回滾,然后摘櫻桃只摘修改路由的那個哈希值,然后進行提交
其他操作:
過程中創(chuàng)建新分支命名不混亂,又進行刪除分支
// 刪除本地分支
git branch -d branchv.1.3.1copy(分支名)
// 發(fā)現(xiàn)沒成功
// 強制刪除 (成功)
git branch -D branchv.1.3.1copy(分支名)
總結(jié):此次翻車事件純屬操作不規(guī)范,當?shù)Y(jié)束后不應該修改當前分支代碼,除非一些不大的操作且緊急,如果只是自己對代碼進行優(yōu)化應該新創(chuàng)建一個分支進行操作,待下一個迭代進行合并提交