2 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
我的做法是本地回滾到正確的版本,然后在push一次,如果要消除之前的那次提交記錄,貌似要用git rebase

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
沒(méi)有,只能 git reset --hard
然后 git push -f
。
你的問(wèn)題詢問(wèn)的是如何撤銷 remote 的 commit,唯一的辦法就是本地修正然后又強(qiáng)制推送,并且很多人都已經(jīng)提到,強(qiáng)制推送是非常壞的實(shí)踐,除非必要或者個(gè)人未公開(kāi)項(xiàng)目或者小團(tuán)隊(duì)項(xiàng)目(溝通成本較低)才可行。
貌似你想清理提交歷史,那么 git 相比于其它 VCS 在這方面絕對(duì)是非常在行的。你可以使用 git rebase
命令對(duì)歷史進(jìn)行重構(gòu),可以重新排序、合并、拆分一些提交,總之完全足夠清理你所謂的臟歷史。如果你想要對(duì)整個(gè)歷史做某些確定的修改,還有 git fileter-branch
命令可用,非常靈活,相當(dāng)值得深入。
說(shuō)說(shuō)我的提交流程吧,我一般是對(duì)一個(gè)文件進(jìn)行修改直到達(dá)到我的目的后才開(kāi)始進(jìn)行提交,這個(gè)時(shí)候我也不是只直接做一次提交,而是使用 vim 和 vim-fugitive 插件,在 diff 模式下打開(kāi)工作區(qū)和暫存區(qū),然后在暫存區(qū)重新一步一步的重現(xiàn)我的修改,在適當(dāng)?shù)臅r(shí)候進(jìn)行提交。由于我已經(jīng)完成了整個(gè)修改,所以我很清楚每個(gè)修訂該誰(shuí)先誰(shuí)后,所以能夠做到比較干凈清晰和“原子性”(即一個(gè)提交只做一個(gè)特定的修改,而不是混合若干個(gè)修改)的提交,方便其他人進(jìn)行代碼審閱。
- 2 回答
- 0 關(guān)注
- 225 瀏覽
添加回答
舉報(bào)