git reset 用法
git reset命令是Git提供的後悔藥之一,它可以幫我們把內容恢復到指定的commit提交版本。
首先看一下當前專案的commit提交歷史:
[Shell] 純文字檢視 複製程式碼$ git log --oneline
程式碼執行效果截圖如下:
當前(c4版本)readme.txt檔案內容如下:
[HTML] 純文字檢視 複製程式碼螞蟻部落一 螞蟻部落二 螞蟻部落三 螞蟻部落四
現在要恢復到c3版本,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git reset 937dd8e --hard
程式碼執行效果截圖如下:
readme.txt檔案內容已經變為:
[HTML] 純文字檢視 複製程式碼螞蟻部落一 螞蟻部落二 螞蟻部落三
reset翻譯成中文有重置的意思,恰如起名,git reset命令可以重置當前分支所指向提交的位置,很多教程說此命令的作用是刪除分支或者提交,其實這是完全錯誤的,commit提交依然存在,只是當前分支所指向的commit提交進行了重置,分支所指向的新commit提交之後的提交就像消失了一樣(git log無法查詢到)。
一.命令解析:
(1).git reset後面緊跟的引數是指定commit提交的標識。
(2).標識可以是sha-1值或者HEAD、HEAD^或者分支名稱等形式。
(3).--hard的作用在文章後面介紹。
二.程式碼例項:
(1).使用sha-1值作為引數:
前面程式碼我們將分支重置到937dd8e版本,下面再還原回去:
[Shell] 純文字檢視 複製程式碼$ git reset 5609309 --hard
程式碼執行效果截圖如下:
(2).使用HEAD作為引數:
再重置到937dd8e提交,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git reset HEAD^ --hard
程式碼執行效果截圖如下:
HEAD執行當前分支,^當前分支所指向提交的前一個提交,^^表示當前分支所指向提交的前一個分支的前一個分支,以此類推;^^過多自然不太方便,可以使用HEAD~2表示。
(3).使用分支名稱作為引數:
現在本人事先將分支指向最後一次commit,下面使用分支名稱作為引數,將分支指向前一個commit(937dd8e)。
程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git reset master^ --hard
程式碼執行效果截圖如下:
三.mixed、soft和hard:
(1).--mixed:預設值,當重置分支所指向commit提交位置時,暫存區中的內容會被新指向的commit提交內容所替換,工作區內容不變。
(2).--soft:暫存區和工作區的內容都保持原樣,不會被替換。
(3).--hard:暫存區和工作區的內容都會被新指向的commit提交內容所替換;git reset --hard隻影響被跟蹤的檔案,如果工作區有新增的檔案,並不會被影響。
最後說明:
假如commit已經被push到遠端倉庫上,那麼其他開發人員可能會基於對應的commit提交進行開發產生新的commit,如果此時進行reset操作,會造成其他開發人員的提交歷史丟失,這可能會產生嚴重後果。
相關文章
- git reset 和 git revertGit
- git revert與git resetGit
- git操作之三:git resetGit
- git reset --hard HEAD^Git
- Reset and Checkout Files in GitGit
- Git reset 和 Git revert 實踐Git
- Git進階命令-resetGit
- git checkout 和 git reset 的區別 —— Git 學習筆記 09Git筆記
- git reset 命令詳解(一)—— Git 學習筆記 07Git筆記
- git reset 命令詳解(二)—— Git 學習筆記 08Git筆記
- Git基本用法Git
- git reflog用法Git
- git reset --hard 操作後的資料恢復Git資料恢復
- git grep命令用法Git
- git show命令用法Git
- 想成為Git大神?從學會reset開始吧Git
- git pull如果提示merge衝突,先進行git reset --hard origin/master 後再git pullGitAST
- git 基礎用法梳理Git
- git stash用法詳解Git
- 『現學現忘』Git後悔藥 — 29、版本回退git reset --mixed命令說明Git
- 『現學現忘』Git後悔藥 — 28、版本回退git reset --soft命令說明Git
- 『現學現忘』Git後悔藥 — 30、版本回退git reset --hard命令說明Git
- git-stash簡單用法Git
- Git SSH 命令常見用法Git
- Git基本用法,小白入門Git
- git rebase --onto 的奇妙用法Git
- Git ORIG_HEAD用法介紹Git
- Git tag標籤用法詳解Git
- Git 的日常工作用法Git
- git cherry-pick的用法記錄Git
- 『現學現忘』Git後悔藥 — 31、reset版本回退命令總結Git
- JavaScript reset 事件JavaScript事件
- css-resetCSS
- IDE Eval Reset 重置IDE
- git在工作中的用法總結-使用篇Git
- Simple FSM 3(asynchronous reset)
- Simple FSM 3(synchronous reset)
- Git的reset和revert有什麼區別?它們分別適用於什麼場景?Git