日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git撤销修改场景及对应指令(checkout、reset、revert)详解

發布時間:2024/4/13 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git撤销修改场景及对应指令(checkout、reset、revert)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景一:撤銷工作區的修改(未執行git add)

指令:git checkout 【目錄或文件名】

實例:

1、修改了test.txt文檔,git status 會出現如下提示:

2、git checkout test.txt,無提示

3、git status,顯示干凈的工作區

場景二:撤銷暫存區的修改(已執行git add,但未執行git commit)

指令:git reset 【HEAD或某一版本號】【可選:文件名】(HEAD指向最近的一個版本,一個commit就是一個版本,版本號可以通過git log指令查詢)

注意:git reset有三個參數,--soft、--mixed、--hard,如果不指定,會默認指行--mixed參數,它的意思是將指定版本之后的修改(在本場景中,就是最近一次提交后的修改),都撤回到工作區中,也就是未執行git add的狀態。如果加上--hard參數,就會放棄指定版本之后的所有修改,會出現干凈的工作區與暫存區(此參數會在下個場景展示實例)。如果加上--soft參數,則會把指定版本之后的修改撤回到暫存區,工作區內容不變。

實例:

1、修改test.txt文檔,并提交修改到暫存區

2、git reset HEAD

3、git status,顯示修改撤回到了工作區

場景三:撤銷已經執行git commit的修改(真正意義上的版本回退)

指令:git reset或git revert

git reset與git revert的區別:

git reset會修改git log的版本歷史,如果你回退到了幾個版本前,那git log時就會發現你丟失了被回退的版本。而git revert不會修改版本歷史,你回退哪個版本,git revert就會新建一個提交,把你要回退版本的修改抵消掉。如果沒看懂,請看實例:

實例一:git reset

1、git log --pretty=online 顯示有三個版本

2、git reset --hard 版本號(輸前幾位即可),回退版本到Second commit

3、git log --pretty=online,丟失版本Third commit

實例二:git revert

1、git log --pretty=online 顯示有三個版本

2、git revert 版本號,抵消某個版本與其之后版本的修改,注意,這里的邏輯與git reset不一樣,如果想回到Second commit的版本,就需要抵消掉Third commit的修改。所以這里應該git revert Third commit的版本號

3、revert的過程中可能會有沖突,git status查看沖突位置,解決沖突,git commit 文件名(無需git add)

4、git log --pretty=online,Third commit并沒有丟失,而是多了一個revert版本,你可以 git log -p查看每個版本的修改,發現revert的版本所做的修改與Third commit恰恰相反,正好抵消掉了它的修改。

忠告:如果你的回退涉及到了遠程分支,在版本回退時最好使用revert,因它沒有修改版本歷史;如果使用reset,因為你的reset操作,會使你比遠程少了幾個提交,遠程會提示你落后于遠程版本,應該先git pull代碼,那么你的reset操作又有何意義呢?(git push -f 強推可以做到,但不推薦這樣做)

總結

以上是生活随笔為你收集整理的Git撤销修改场景及对应指令(checkout、reset、revert)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。