git提交錯(cuò)了?別慌,直接刪除提交記錄
共 5162字,需瀏覽 11分鐘
·
2024-04-29 10:30
來源:juejin.cn/post/7355692365330792488
?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對一提問 / 學(xué)習(xí)打卡 / 贈(zèng)書福利
全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接:http://116.62.199.48/ ,新項(xiàng)目正在醞釀中。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了239小節(jié),累計(jì)38w+字,講解圖:1645張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1300+小伙伴加入(早鳥價(jià)超低)
為什么要?jiǎng)h除提交歷史
前幾天產(chǎn)品提了個(gè)很扯淡的需求,我在代碼了進(jìn)行了吐槽....
要命的是我不下心進(jìn)行了代碼提交:
我們的遠(yuǎn)程倉庫大家都能看見的
這要是被其他人發(fā)現(xiàn)就慘了!當(dāng)務(wù)之急,我必須立刻馬上刪除這一條提交記錄!!
于是,我打開百度,搜索到兩個(gè)救命關(guān)鍵詞:git revert和git reset!這兩個(gè)命令都有撤銷操作的功能!
使用git revert撤銷提交
revert的英文釋義是回復(fù)、恢復(fù)(到原來的狀態(tài))
作用
git revert 是 Git 中用于撤銷一個(gè)或多個(gè)提交的命令,但是會(huì)保留歷史記錄。它創(chuàng)建一個(gè)新的提交,該提交是對原提交的相反操作,以撤銷原提交的更改。通過 git revert 撤銷提交,可以保持歷史記錄的完整性,不會(huì)修改已經(jīng)共享的提交歷史。
語法
撤銷單個(gè)提交:
git revert <commit-hash>
這會(huì)創(chuàng)建一個(gè)新的提交,用于撤銷指定的提交 的更改。
撤銷多個(gè)提交:
git revert <commit-hash1> <commit-hash2> ...
這會(huì)為每個(gè)指定的提交創(chuàng)建一個(gè)新的撤銷提交。
撤銷最近的提交:
git revert HEAD
撤銷某個(gè)范圍內(nèi)的提交:
git revert <commit-hash1>^..<commit-hash2>
這會(huì)撤銷從 (不包括)到 (包括)范圍內(nèi)的所有提交。
撤銷提交時(shí),Git 會(huì)打開一個(gè)文本編輯器,讓你輸入撤銷提交的信息。你可以修改默認(rèn)的提交信息,然后保存并關(guān)閉編輯器。
撤銷實(shí)操
不管3721,我們先試著用它撤銷下提交試試。
先試用git log(其他可視化面板也行)找到要撤銷的commit哈希碼
b1b56b50a0859556623283946972e495d4a42fc1
然后,執(zhí)行單個(gè)文件撤銷命令
git revert b1b56b50a0859556623283946972e495d4a42fc1
執(zhí)行命令后,控制臺(tái)會(huì)出現(xiàn)vim編輯器,讓我們?yōu)楸敬胃奶峤徽f明
vim編輯器小技巧
進(jìn)入編輯模式:進(jìn)入編輯模式的方式取決于當(dāng)前編輯器的模式。通常情況下,按下 i 鍵可以進(jìn)入插入模式,允許你編輯文本。 編輯文本:在插入模式下,你可以編輯文本。使用方向鍵或者 h, j, k, l 鍵移動(dòng)光標(biāo)。 退出編輯模式:編輯完成后,按下 Esc 鍵退出插入模式。 保存并退出:在退出編輯模式后,輸入 :wq 并按下 Enter 鍵,可以保存并退出編輯器。 放棄更改并退出:在退出編輯模式后,輸入 :q! 并按下 Enter 鍵,可以放棄更改并退出編輯器。
我們點(diǎn)擊i輸入提交說明【刪除錯(cuò)誤提交】,然后點(diǎn)擊ESC退出編輯模式,最后輸入:wq保存并退出。
退出vim編輯器后,直接輸入git push推送代碼!
我們來看看效果:
代碼里上次提交的內(nèi)容確實(shí)沒了!
第一次錯(cuò)誤提交時(shí)的代碼內(nèi)容
revert后的代碼內(nèi)容
但是,git的推送歷史上有啊!!
這下我算明白了git revert的作用了:用于撤銷一個(gè)或多個(gè)提交的命令,但是會(huì)保留歷史記錄!
這顯然不是我的意圖,我想做的是刪除git提交歷史!刪除!不保留任何痕跡呢種!只能試試git reset了!
使用git reset撤銷提交
憑借我初中畢業(yè)的水平,我一眼就明白了reset的含義:重置!現(xiàn)在,我們先看看git reset的作用。
作用
git reset 用于移動(dòng) HEAD 指針并可選地更改暫存區(qū)和工作目錄的狀態(tài)。它是一個(gè)非常強(qiáng)大的工具,常用于撤銷提交、取消暫存文件、修改提交內(nèi)容等操作。
語法
撤銷提交,保留修改
git reset --soft HEAD~1
這會(huì)將 HEAD 指向的分支的最新提交撤銷掉,并保留所有更改在工作目錄中。這樣你就可以重新提交,并修改提交信息。
撤銷提交,取消暫存的文件
git reset HEAD~1
這會(huì)將 HEAD 指向的分支的最新提交撤銷掉,并將暫存區(qū)的文件取消暫存,但保留在工作目錄中。這樣你可以重新選擇要暫存的文件。
撤銷提交,丟棄修改
git reset --hard HEAD~1
這會(huì)將 HEAD 指向的分支的最新提交撤銷掉,并丟棄所有更改,包括暫存區(qū)和工作目錄中的文件。這樣你就可以完全回到上一個(gè)提交的狀態(tài)。
將 HEAD 指針移動(dòng)到指定的提交
git reset --hard <commit-hash>
這會(huì)將 HEAD 指針移動(dòng)到指定的提交,并丟棄所有更改。這可以用來回滾到歷史提交狀態(tài)
撤銷實(shí)操
由于本地沒有其他修改,暫存區(qū)也沒有文件,因此,使用
git reset HEAD~1
但是,我們剛才的誤操作,導(dǎo)致有兩條不應(yīng)該出現(xiàn)的操作記錄
所以,我們HEAD指針應(yīng)該向下移動(dòng)2個(gè)
git reset HEAD~2
命令行輸入后,我們就會(huì)發(fā)現(xiàn)本地代碼已經(jīng)恢復(fù)到?jīng)]有提交這兩個(gè)記錄前的狀態(tài)了!
但云端的記錄還在
那如何刪除云端的記錄呢?很簡單,將本地倉庫的代碼強(qiáng)推到遠(yuǎn)端倉庫覆蓋掉就行!(本地倉庫已經(jīng)是未提交兩個(gè)錯(cuò)誤信息時(shí)的狀態(tài)了)
最后,我們使用下面的命令將本地代碼強(qiáng)行覆蓋云端
git push --force
執(zhí)行完后,就是見證奇跡的時(shí)刻
再看看git上
也沒有,nice!!
重要提示
使用 --force 選項(xiàng)將覆蓋遠(yuǎn)程倉庫的提交歷史,這意味著遠(yuǎn)程倉庫的歷史將會(huì)變?yōu)槟惚镜貍}庫的歷史。這是非常危險(xiǎn)的操作!!一定要確保本地代碼和遠(yuǎn)程代碼是相關(guān)的!!一定要謹(jǐn)慎操作!!
注git push --force是下面命令的簡寫
git push origin <branch-name> --force
git push origin --force 命令用于將本地分支推送到遠(yuǎn)程倉庫,并且使用 --force 選項(xiàng)強(qiáng)制覆蓋遠(yuǎn)程倉庫中的提交歷史。
git push: 將本地分支的提交推送到遠(yuǎn)程倉庫。 origin: 指定遠(yuǎn)程倉庫的別名。通常指向你克隆或者添加遠(yuǎn)程倉庫時(shí)所使用的 URL。 : 要推送的本地分支的名稱。 --force (或 -f): 強(qiáng)制推送選項(xiàng)。這會(huì)覆蓋遠(yuǎn)程倉庫的提交歷史,即使本地分支的提交歷史不是遠(yuǎn)程分支的子集也會(huì)強(qiáng)制推送。
總結(jié)
git reset 用于移動(dòng)分支的指針,可以修改提交歷史,但不會(huì)創(chuàng)建新的提交;而 git revert 用于撤銷先前的提交,并創(chuàng)建一個(gè)新的提交來保持提交歷史的完整性。
通過本實(shí)例,你一定學(xué)會(huì)了使用git reset 加 git push --force的方法刪除遠(yuǎn)程倉庫的錯(cuò)誤提交歷史!如果有收獲,記得收藏點(diǎn)贊哈~
?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對一提問 / 學(xué)習(xí)打卡 / 贈(zèng)書福利
全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接:http://116.62.199.48/ ,新項(xiàng)目正在醞釀中。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了239小節(jié),累計(jì)38w+字,講解圖:1645張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1300+小伙伴加入(早鳥價(jià)超低)
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
PS:因公眾號(hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過內(nèi)容,記得讀完點(diǎn)一下“在看”,加個(gè)“星標(biāo)”,這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列表里。
點(diǎn)“在看”支持小哈呀,謝謝啦
