佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 詳解git reset 加不加 --hard的區(qū)別

詳解git reset 加不加 --hard的區(qū)別

熱門(mén)標(biāo)簽:智能手機(jī) 服務(wù)器配置 呼叫中心市場(chǎng)需求 銀行業(yè)務(wù) 鐵路電話系統(tǒng) 美圖手機(jī) 檢查注冊(cè)表項(xiàng) 網(wǎng)站文章發(fā)布

通常我們提交代碼一般都是 git add ,git commit -m,   git push的這么個(gè)流程。添加到暫存區(qū),提交到git庫(kù)生成版本號(hào),push到遠(yuǎn)程倉(cāng)庫(kù)以供他人可以使用。這是一個(gè)完整的且非常順利的流程。但是往往實(shí)際開(kāi)發(fā)中并不是這么順利,總會(huì)出現(xiàn)這樣或那樣的問(wèn)題。

git reset就是當(dāng)我們提交了錯(cuò)誤的內(nèi)容后進(jìn)行回退使用的命令。

git reset 版本號(hào),就是回退到該版本號(hào)上。

通常我們使用

git reset HEAD就是回退到當(dāng)前版本。git reset HEAD^回退到上一版本

如我們git add 一個(gè)文件

這時(shí)我們發(fā)現(xiàn)添加了錯(cuò)誤的內(nèi)容,此時(shí)我們只是做了add 操作,就是將修改了內(nèi)容添加到了暫存區(qū),還沒(méi)有執(zhí)行commit,所以還沒(méi)有生成版本號(hào),當(dāng)前的版本號(hào)對(duì)應(yīng)的內(nèi)容,還是你add之前的內(nèi)容,所以我們只需要將代碼回退到當(dāng)前版本就行。

git reset HEAD ,截圖中也有提示內(nèi)容 use git reset HEAD file> to unstage,我的理解就是去除掉添加到暫存區(qū)的內(nèi)容。

執(zhí)行命令后,我們?cè)倏纯串?dāng)前的git 狀態(tài),如圖:

查看狀態(tài),發(fā)現(xiàn)和我們修改了工作區(qū)的內(nèi)容,還沒(méi)有add時(shí)的狀態(tài)是一樣的了。

說(shuō)明git reset HEAD操作只對(duì)暫存區(qū)起效果,不對(duì)工作區(qū)的內(nèi)容起效果。所以我們要想修改掉工作區(qū)的內(nèi)容還得繼續(xù)執(zhí)行命令進(jìn)行還原。根據(jù)上面的截圖提示,git add是添加,因?yàn)槲覀儼l(fā)現(xiàn)了錯(cuò)誤才回退的,所以肯定不能執(zhí)行這個(gè)了。

還有個(gè)命令提示:git checkout --file> to discard changes in working directory這個(gè)意思就是下載某某文件,丟棄掉該文件在工作區(qū)的改變內(nèi)容。姑且就這么翻譯吧。就是把文件還原了,工作區(qū)的修改也沒(méi)了。我們執(zhí)行該命令查看狀態(tài),如圖:

此時(shí)你去看工作的文件修改的地方就會(huì)已經(jīng)沒(méi)有了,工作區(qū)文件也干凈了,算是徹底把文件還原了。

以上的場(chǎng)景是add后還沒(méi)有commit的,下面我們看一下已經(jīng)add并且commit之后的該如何

如圖,我已經(jīng)commit了,還沒(méi)有push,push的內(nèi)容我們先不管,push這個(gè)命令其實(shí)和提交沒(méi)關(guān)系,他只是推送到遠(yuǎn)程了,如果push了,也就是我們回退了之后,再重新push一下而已,所以請(qǐng)不要糾結(jié)push這個(gè)操作。他和提交版本其實(shí)沒(méi)有關(guān)系的。

回歸話題。我們已經(jīng)commit了,說(shuō)明已經(jīng)生成了最新的版本號(hào)了,此時(shí)我們想回退,則肯定是回退到之前的一個(gè)版本了,如果你知道前一個(gè)版本的版本號(hào),git reset 版本號(hào),這樣就可以了,但是一般我們不會(huì)去記版本號(hào)的,當(dāng)然你可以執(zhí)行g(shù)it log命令去查到。git為我們提供了一個(gè)更簡(jiǎn)單的回退上一個(gè)版本的方法  git reset HEAD^,此命令專門(mén)用于回退到上一個(gè)版本,如果你的錯(cuò)誤路程已經(jīng)走的很遠(yuǎn)了,僅僅回退上一個(gè)版本可能也解決不了了,那就需要查找日志,找到對(duì)應(yīng)的版本號(hào)進(jìn)行g(shù)it reset 版本號(hào)進(jìn)行回退了。我們執(zhí)行 git reset HEAD^后,再查看狀態(tài),如圖:

這個(gè)截圖和只做了add,沒(méi)有進(jìn)行commit的回退后的截圖一致的。唯一的區(qū)別就是,

git reset 后面跟的一個(gè)是HEAD,一個(gè)是HEAD^,這個(gè)應(yīng)該很好理解,因?yàn)橐粋€(gè)沒(méi)有commit,還沒(méi)有生成版本號(hào),一個(gè)已經(jīng)commit了,有的新的版本號(hào)了。要回退肯定要用之前的版本號(hào)了。

本來(lái)想說(shuō)git reset --hard 和沒(méi)有--hard的區(qū)別的,結(jié)果扯了這么多沒(méi)用的,唉希望沒(méi)有繞暈吧。后面我們說(shuō)明一下--hard的作用

同樣的,我們先add,不進(jìn)行commit操作,add后,我們執(zhí)行 git reset --hard HEAD,如圖:

然后我們執(zhí)行g(shù)it status查看狀態(tài),如圖:

注意,這里和沒(méi)有--hard是有區(qū)別的了啦,有了參數(shù)--hard,直接把工作區(qū)的內(nèi)容也修改了,不加--hard的時(shí)候只是操作了暫存區(qū),不影響工作區(qū)的,--hard一步到位,不加--hard需要分開(kāi)執(zhí)行,兩步操作??瓷先ゼ恿?-hard方便好多,但是我不建議大家使用這個(gè),因?yàn)檫@個(gè)殺傷力有點(diǎn)強(qiáng)。萬(wàn)一手殘刪掉了一些自己不想刪的就沒(méi)有后悔藥了。所以慎用吧

加了--hard的,有沒(méi)有commit的是沒(méi)有區(qū)分的,這里不做截圖了。大家可以自己嘗試。

到此這篇關(guān)于詳解git reset 加不加 --hard的區(qū)別的文章就介紹到這了,更多相關(guān)git reset --hard內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Git恢復(fù)之前版本的兩種方法reset、revert(圖文詳解)
  • Git撤銷&回滾操作(git reset 和 get revert)
  • git revert和git reset的區(qū)別詳解

標(biāo)簽:上海 新疆 沈陽(yáng) 樂(lè)山 河南 滄州 長(zhǎng)治 紅河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解git reset 加不加 --hard的區(qū)別》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    灵石县| 榆社县| 永年县| 舟山市| 泉州市| 贡嘎县| 磐石市| 金昌市| 东乌珠穆沁旗| 吉水县| 黎平县| 婺源县| 镇巴县| 昌都县| 海淀区| 南召县| 建宁县| 富川| 梁山县| 德钦县| 辽阳县| 从化市| 大姚县| 平泉县| 汝州市| 彰武县| 宁德市| 朔州市| 台北县| 长乐市| 连城县| 大兴区| 宁城县| 长岭县| 灵台县| 讷河市| 赤峰市| 南京市| 万州区| 庆元县| 长治县|