最近兩天,公司的git
合併程式碼時,出現了嚴重的問題,浪費很多時間;
現在記錄下;
情況是這樣的,有一個 dev
測試分支,我們有自己額外的開發分支,在不知情的情況下有人執行了 merge dev
當釋出的時候才發現問題。模擬圖片:
而此時版本庫已經提交過多次,現在的問題是如何將中間 merge dev
提交的程式碼撤銷,並保留之後別人提交的程式碼。
步驟 一
git revert 100047dcc
error: Commit 100047dccb58f3ee5e27b0dfaf5c02ac91dc2c73 is a merge but no -m option was given.
fatal: revert failed
結果報錯了,報了一個 Commit is a merge but no -m option was given.
為什麼呢?
如果 100047dcc
這只是一個普通的提交,其實是不會報錯的,但是,這是一個 merge
的提交。
這個時候,怎麼辦呢?
我的做法
步驟 一
git revert 100047dcc -m 1
引數 -m 就是指定要撤銷的那個提價,從左往右,從1開始數;也就是我撤銷的是 0099aca7
。
接著其把程式碼衝突,然後我就解決衝突,保留主分支的程式碼,去掉那個人的程式碼。
最後一步
git push
具體步驟:
1,首先git log檢視提交記錄,找到出錯的前一筆提交的commit_id
2,用命令git rebase -i commit_id ,查詢提交記錄
3,將出錯那筆提交的pick改為drop
4,Esc,:wq
1、git reset --hard 1d7444 #回退到出錯版本前一個commit
2、git cherry-pick 626335 #將某次commit的更改應用到當前版本(將出錯 cmmit 之後別人提交的程式碼合併到當前正常程式碼分支上)
3、git push origin HEAD --force #強制提交
本作品採用《CC 協議》,轉載必須註明作者和本文連結