多分支開發中誤merge其他分支,且之后又有新commit
哈哈哈,是否感到進退兩難,生無可戀...
分支 master、release、dev_xxx,dev_yyy四個分支,master線上分支,release測試環境分支,dev_xxx,dev_yyy開發分支
場景1: dev_xxx要合並到master,突然發現commit中有一個merge release,而這個merge中包含dev_yyy的代碼,而dev_yyy還不能上線
解決辦法: git cherry-pick <commitHash>
# 將指定的提交(commit)應用於其他分支
eg: dev_xxx上的 commit 記錄A,B,C
git checkout master #首先切到要合並的分支上 git cherry-pick A #把dev_xxx上的A合並到master git cherry-pick A..C #把dev_xxx上的B,C合並到master git cherry-pick A^..C #把dev_xxx上的A,B,C合並到master
場景2: dev_xxx合並到了master,突然發現commit中有一個merge release,而這個merge中包含dev_yyy的代碼,而dev_yyy還不能上線
解決辦法: git rebase -i <commitHash>
eg:master上有 A1-B1-A2 三個提交,要刪除B1
git rebase -i A1 #這里看到的是 A1之后的提交記錄
按字母I鍵進入編輯模式,將需要刪除的commit的pick改為drop,然后按esc退出編輯,:wq保存,就會刪除提交記錄B1
git rebase -i #也經常用於可合並多個提交記錄,用法就是把 pick 改成 s, “s” 為 “squash” 的縮寫
不過,使用這個命令與遠程端同步的時候就需要用 git push -f