背景
在yihao-cp-channel分支上fix一個bug, 突然想起來主干上之前上線的一個bug沒合過來,鬼使神差就去merge, 但是卻merge了dev分支的代碼。趕緊看看dev上的提交記錄。尼瑪匣吊,他們居然提交了那么多的代碼舅逸,果斷要revert回滾桌肴。
revert a merge commit
直接git revert commid-id會報 -m, 沒有指定mainline的錯誤。在revert merge時候必須通過-m 指定parent, 從而去掉另一個分支的最近更改琉历。
$ git show g
commit g
merge: yihao-cp-channel dev
$git revert -m 1 g
保留 yihao-cp-channel分支上的修改坠七,撤銷 dev 分支上合并過來的修改。
新增git記錄G是撤銷g生成的 commit善已。通過$ git show G之后灼捂,我們會發(fā)現(xiàn)G是一個常規(guī)提交,內(nèi)容就是撤銷 merge 時被丟棄的那條線索的所有 commit 的「反操作」的合集换团。
錯誤的merge的確reverted成功了悉稠,但是此時準備再合并master,提示已經(jīng)是最新的更新艘包,合并不了的猛。尼瑪,認為我的分支要新于master了想虎。好吧卦尊,我重置到之前的一個老的版本再合并吧,只能這樣了舌厨。
git reset
把本地yihao-cp-channel代碼回撤到有問題的提交點之前
git reset -q –hard commid-id
將本地yihao-cp-channel強行推送到遠端岂却,需先在githab上設(shè)置解除master的強行推送的限制,之后再改回來.
git push -f origin yihao-cp-channel
終于成功了裙椭,然后就好好的合并master吧躏哩。