<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>

          不小心將測(cè)試代碼提交到生產(chǎn)環(huán)境,教你 6 種方法秒解決!

          共 1721字,需瀏覽 4分鐘

           ·

          2022-02-12 15:39

          Git 版本管理時(shí),往往需要撤銷某些操作。

          本文介紹幾種最主要的情況,給出詳細(xì)的解釋。

          一、撤銷提交

          一種常見(jiàn)的場(chǎng)景是,提交代碼以后,你突然意識(shí)到這個(gè)提交有問(wèn)題,應(yīng)該撤銷掉,這時(shí)執(zhí)行下面的命令就可以了。

          $ git revert HEAD

          上面命令的原理是,在當(dāng)前提交后面,新增一次提交,抵消掉上一次提交導(dǎo)致的所有變化。它不會(huì)改變過(guò)去的歷史,所以是首選方式,沒(méi)有任何丟失代碼的風(fēng)險(xiǎn)。

          git revert 命令只能抵消上一個(gè)提交,如果想抵消多個(gè)提交,必須在命令行依次指定這些提交。比如,抵消前兩個(gè)提交,要像下面這樣寫。

          $ git revert [倒數(shù)第一個(gè)提交] [倒數(shù)第二個(gè)提交]

          git revert 命令還有兩個(gè)參數(shù)。

          • --no-edit:執(zhí)行時(shí)不打開(kāi)默認(rèn)編輯器,直接使用 Git 自動(dòng)生成的提交信息。
          • --no-commit:只抵消暫存區(qū)和工作區(qū)的文件變化,不產(chǎn)生新的提交。

          二、丟棄提交

          如果希望以前的提交在歷史中徹底消失,而不是被抵消掉,可以使用 git reset 命令,丟棄掉某個(gè)提交之后的所有提交。

          $ git reset [last good SHA]

          git reset 的原理是,讓最新提交的指針回到以前某個(gè)時(shí)點(diǎn),該時(shí)點(diǎn)之后的提交都從歷史中消失。

          默認(rèn)情況下,git reset 不改變工作區(qū)的文件(但會(huì)改變暫存區(qū)),--hard 參數(shù)可以讓工作區(qū)里面的文件也回到以前的狀態(tài)。

          $ git reset --hard [last good SHA]

          執(zhí)行 git reset 命令之后,如果想找回那些丟棄掉的提交,可以使用 git reflog 命令,具體做法參考這里。不過(guò),這種做法有時(shí)效性,時(shí)間長(zhǎng)了可能找不回來(lái)。

          三、替換上一次提交

          提交以后,發(fā)現(xiàn)提交信息寫錯(cuò)了,這時(shí)可以使用 git commit 命令的 --amend ?參數(shù),可以修改上一次的提交信息。

          $ git commit --amend -m "Fixes bug #42"

          它的原理是產(chǎn)生一個(gè)新的提交對(duì)象,替換掉上一次提交產(chǎn)生的提交對(duì)象。

          這時(shí)如果暫存區(qū)有發(fā)生變化的文件,會(huì)一起提交到倉(cāng)庫(kù)。所以,--amend 不僅可以修改提交信息,還可以整個(gè)把上一次提交替換掉。

          四、撤銷工作區(qū)的文件修改

          如果工作區(qū)的某個(gè)文件被改亂了,但還沒(méi)有提交,可以用 git checkout 命令找回本次修改之前的文件。

          $ git checkout -- [filename]

          它的原理是先找暫存區(qū),如果該文件有暫存的版本,則恢復(fù)該版本,否則恢復(fù)上一次提交的版本。

          注意,工作區(qū)的文件變化一旦被撤銷,就無(wú)法找回了。

          五、從暫存區(qū)撤銷文件

          如果不小心把一個(gè)文件添加到暫存區(qū),可以用下面的命令撤銷。

          $ git rm --cached [filename]

          上面的命令不影響已經(jīng)提交的內(nèi)容。

          六、撤銷當(dāng)前分支的變化

          你在當(dāng)前分支上做了幾次提交,突然發(fā)現(xiàn)放錯(cuò)了分支,這幾個(gè)提交本應(yīng)該放到另一個(gè)分支。

          # 新建一個(gè) feature 分支,指向當(dāng)前最新的提交# 注意,這時(shí)依然停留在當(dāng)前分支$ git branch feature
          # 切換到這幾次提交之前的狀態(tài)$ git reset --hard [當(dāng)前分支此前的最后一次提交]
          # 切換到 feature 分支$ git checkout feature

          上面的操作等于是撤銷當(dāng)前分支的變化,將這些變化放到一個(gè)新建的分支。

          本文轉(zhuǎn)載自:「阮一峰的網(wǎng)絡(luò)日志」,原文:https://url.cn/5NLK2pC,版權(quán)歸原作者所有。

          往期推薦

          基于 Java 的疫情防控管理系統(tǒng)

          一款I(lǐng)DEA插件神器,幫你一鍵轉(zhuǎn)換DTO、VO、BO、PO、DO,再見(jiàn)工具類!

          我們公司用了5年的前后端分離接口規(guī)范

          SpringBoot + SpringBatch + Quartz整合定時(shí)批量任務(wù)

          我裸辭接單第一個(gè)月的收入

          9 種保護(hù)措施讓你的 Spring Boot 項(xiàng)目變得銅頭鐵臂!


          瀏覽 83
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  青娱乐在线播放在线观看视频 | 在线成人中文字幕无码影 | 无码内射中文字幕岛国片 | 日本高清视频一区二区三区 | 无码一区二区免费三区在线 |