欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

git中reset和revert區(qū)別小結(jié)

 更新時(shí)間:2023年06月21日 11:09:53   作者:Alan0517  
本文主要介紹了git中reset和revert區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 案例

線上master分支不可信,需要回到某個(gè)分支;
但是很多人習(xí)慣把一個(gè)需求,分多次commit,于是會(huì)出現(xiàn)下面這種情況

基于這種情況,git revert 就不如 git reset好用,可以借助Idea,直接通過 git reset --hard 指向需要回退到的commit,然后隨便找個(gè)地方,敲上一個(gè)空格,產(chǎn)生一次新的commit id,即可達(dá)到效果;

2. git的 reset 和 revert 有啥區(qū)別?

2.1 問題背景

在某一次的上線中,發(fā)現(xiàn)有的同學(xué),上線之后發(fā)現(xiàn)master 分支存在bug,線上回滾之后,在處理git倉庫回滾分支時(shí),因分不清
reset(重置)、revert(恢復(fù)) 兩者的區(qū)別,使用git reset回退之后,再與master merge時(shí),發(fā)現(xiàn)master無變化,因?yàn)樽鳛榇舜我氚咐?,分享一波?/p>

先簡單說一下,在提交到遠(yuǎn)程庫之前我們使用git reset 命令完全可以滿足我們 撤銷操作的需求,如果操作已經(jīng)提交到遠(yuǎn)程庫,那只好使用 git revert 來提交一個(gè)新的撤銷操作 撤銷 需要撤銷的那次commit。

2.2 git的工作流

  • 工作區(qū):即自己當(dāng)前分支所修改的代碼,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。
  • 暫存區(qū):已經(jīng) git add xxx 進(jìn)去,且未 git commit xxx 的。
  • 本地分支:已經(jīng)git commit -m xxx 提交到本地分支的。

在將文件提交至遠(yuǎn)程端時(shí),文件的提交需要經(jīng)過git add、git commit及git push三個(gè)過程才能提交至git遠(yuǎn)程倉庫。
我們平時(shí)修改文件在工作目錄中,提交時(shí)先使用git add提交至?xí)捍鎱^(qū),再通過git commit提交至本地倉庫,最后才能使用git push提交至遠(yuǎn)程倉庫。

2.2.1 在工作區(qū)的代碼

git checkout -- . # 丟棄全部

注意:git checkout – . 丟棄全部,也包括:新增的文件會(huì)被刪除、刪除的文件會(huì)恢復(fù)回來、修改的文件會(huì)回去。這幾個(gè)前提都說的是,回到暫存區(qū)之前的樣子。對(duì)之前保存在暫存區(qū)里的代碼不會(huì)有任何影響。對(duì)commit提交到本地分支的代碼就更沒影響了。當(dāng)然,如果你之前壓根都沒有暫存或commit,那就是回到你上次pull下來的樣子了。

2.2.2 代碼git add到緩存區(qū),并未commit提交

git reset HEAD .  或者
git reset HEAD a.txt

這個(gè)命令僅改變暫存區(qū),并不改變工作區(qū),這意味著在無任何其他操作的情況下,工作區(qū)中的實(shí)際文件同該命令運(yùn)行之前無任何變化

2.2.3 git commit到本地分支、但沒有g(shù)it push到遠(yuǎn)程

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>  # 回到其中你想要的某個(gè)版
或者
git reset --hard HEAD^  # 回到最新的一次提交
或者
git reset HEAD^  # 此時(shí)代碼保留,回到 git add 之前

2.2.4 git push把修改提交到遠(yuǎn)程倉庫

2.2.4.1 通過git reset是直接刪除指定的commit

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force 
# 強(qiáng)制提交一次,之前錯(cuò)誤的提交就從遠(yuǎn)程倉庫刪除

2.2.4.2 通過git revert是用一次新的commit來回滾之前的commit

git log # 得到你需要回退一次提交的commit id
git revert <commit_id>  # 撤銷指定的版本,撤銷也會(huì)作為一次提交進(jìn)行保存
git commit -m "......." 
git push 

2.3 reset

git reset中有三個(gè)命令(–hard、–soft與–mixed);主要用于工作區(qū)、暫存區(qū)、本地倉庫三個(gè)區(qū)域的文件提交撤回

git reset --hard xxx

hard (修改版本庫,修改暫存區(qū),修改工作區(qū))

  • –hard HEAD~1 (或是版本號(hào))意為將版本庫回退1個(gè)版本,但是不僅僅是將本地版本庫的頭指針全部重置到指定版本,也會(huì)重置暫存區(qū),并且會(huì)將工作區(qū)代碼也回退到這個(gè)版本;
git reset --soft xxx

soft (修改版本庫,保留暫存區(qū),保留工作區(qū))

  • –soft HEAD~1 意為將版本庫軟回退1個(gè)版本,所謂軟回退表示將本地版本庫的頭指針全部重置到指定版本,且將這次提交之后的所有變更都移動(dòng)到暫存區(qū)。

2.4 revert

git revert xxx

– git revert 也是撤銷命令,區(qū)別在于reset是指向原地或者向前移動(dòng)指針,git revert是創(chuàng)建一個(gè)commit來覆蓋當(dāng)前的commit,指針向后移動(dòng)。

2.5 git revert 和 git reset的區(qū)別

  • git revert是用一次新的commit來回滾之前的commit,此次提交之前的commit都會(huì)被保留;
  • git reset是回到某次提交,提交及之前的commit都會(huì)被保留,但是此commit id之后的修改都會(huì)被刪除;
  • git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  • 在回滾這一操作上看,效果差不多。但是在日后繼續(xù)merge以前的老版本時(shí)有區(qū)別。因?yàn)間it revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時(shí),導(dǎo)致這部分改變不會(huì)再次出現(xiàn),但是git reset是之間把某些commit在某個(gè)branch上刪除,因而和老的branch再次merge時(shí),這些被回滾的commit應(yīng)該還會(huì)被引入。
  • git reset 是把HEAD向后移動(dòng)了一下,而git revert是HEAD繼續(xù)前進(jìn),只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反,能夠抵消要被revert的內(nèi)容。

通俗易懂的說呢,就是git revert 是回滾當(dāng)前此次的commit,回到上一個(gè)狀態(tài),就好比咱們習(xí)慣性用的Ctrl+z; 而git reset 是回到歷史某個(gè)版本,它的commit是舊的,是歷史的,而git revert 會(huì)產(chǎn)生新的commit,就這么回事

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

相關(guān)文章

  • Istio?訪問外部服務(wù)流量控制最常用的5個(gè)技巧示例

    Istio?訪問外部服務(wù)流量控制最常用的5個(gè)技巧示例

    這篇文章主要介紹了Istio訪問外部服務(wù)流量控制最常用5個(gè)技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 文章中優(yōu)酷視頻全屏及去除廣告在線轉(zhuǎn)換

    文章中優(yōu)酷視頻全屏及去除廣告在線轉(zhuǎn)換

    很多網(wǎng)站發(fā)表了引用優(yōu)酷視頻不能全屏,或一點(diǎn)全屏又跳到官方網(wǎng)了,結(jié)果又要重新緩沖。用戶體驗(yàn)特別不好。
    2010-09-09
  • 關(guān)于git commit 命令解讀

    關(guān)于git commit 命令解讀

    這篇文章主要介紹了關(guān)于git commit 命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解VScode 配置為 LaTeX 編輯器(IDE)

    詳解VScode 配置為 LaTeX 編輯器(IDE)

    這篇文章主要介紹了詳解VScode 配置為 LaTeX 編輯器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • GitLab使用外部提供的Redis緩存數(shù)據(jù)庫的方法詳解

    GitLab使用外部提供的Redis緩存數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了GitLab: 如何使用外部提供的Redis緩存數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • AES加密算法的原理詳解與實(shí)現(xiàn)分析

    AES加密算法的原理詳解與實(shí)現(xiàn)分析

    這篇文章主要介紹了高級(jí)加密標(biāo)準(zhǔn)(AES,Advanced Encryption Standard)為最常見的對(duì)稱加密算法(微信小程序加密傳輸就是用這個(gè)加密算法的)。對(duì)稱加密算法也就是加密和解密用相同的密鑰,需要的朋友可以參考下
    2020-08-08
  • 云開發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開方式及應(yīng)用場景分析

    云開發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開方式及應(yīng)用場景分析

    Tencent CloudBase Toolkit 是云開發(fā)的 VS Code(Visual Studio Code)插件。這篇文章主要介紹了云開發(fā) VSCode 插件 Cloudbase Toolkit 的正確打開方式,需要的朋友可以參考下
    2020-07-07
  • 淺析git 刪除某次指定的提交問題

    淺析git 刪除某次指定的提交問題

    這篇文章主要介紹了git 刪除某次指定的提交問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧
    2020-07-07
  • UTF-8 編碼中BOM的檢測與刪除

    UTF-8 編碼中BOM的檢測與刪除

    所謂BOM,全稱是Byte Order Mark,它是一個(gè)Unicode字符,通常出現(xiàn)在文本的開頭,用來標(biāo)識(shí)字節(jié)序(Big/Little Endian),除此以外還可以標(biāo)識(shí)編碼(UTF-8/16/32),如果出現(xiàn)在文本中間,則解釋為zero width no-break space。
    2011-09-09
  • git提交驗(yàn)證規(guī)范并自動(dòng)生成日志文件的方法

    git提交驗(yàn)證規(guī)范并自動(dòng)生成日志文件的方法

    這篇文章主要介紹了git提交驗(yàn)證規(guī)范并自動(dòng)生成日志文件的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論