<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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 revertgit 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 resetgit 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à)超低)



               
                  

          1. 我的私密學(xué)習(xí)小圈子~

          2. 大廠都在用的 Git 代碼管理規(guī)范 !

          3. 架構(gòu)應(yīng)該如何來理解?

          4. Java8 Steam流太難用了?那你可以試試 JDFrame

          最近面試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)“在看”支持小哈呀,謝謝啦

          瀏覽 207
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  草比网 | 国产黄色视频在线免费观看 | 国精品人伦一区二区三区蜜桃 | 四虎影院黄片 | 69操视频 |