
- Git入門
- Git - 首頁
- Git - 版本控制
- Git - 基本概念
- Git - 命令列
- Git - 安裝
- Git - 首次設定
- Git - 基本命令
- Git - 獲取幫助
- Git - 工具
- Git - 速查表
- Git - 術語
- Git分支
- Git - 簡述分支
- Git - 建立新分支
- Git - 切換分支
- Git - 分支和合並
- Git - 合併衝突
- Git - 管理分支
- Git - 分支工作流程
- Git - 遠端分支
- Git - 跟蹤分支
- Git - 變基
- Git - 變基與合併
- Git - 合併提交
- Git操作
- Git - 克隆操作
- Git - 標籤操作
- Git - 別名操作
- Git - 提交操作
- Git - 暫存操作
- Git - 移動操作
- Git - 重新命名操作
- Git - 推送操作
- Git - 拉取操作
- Git - 分叉操作
- Git - 修補操作
- Git - 差異操作
- Git - 狀態操作
- Git - 日誌操作
- Git - HEAD操作
- Git - origin master
- Git撤銷
- Git - 撤銷更改
- Git - 檢出
- Git - 還原
- Git - 重置
- Git - 恢復操作
- Git - 刪除
- Git - 切換操作
- Git - cherry-pick
- Git - 修訂
- 伺服器上的Git
- Git - 本地協議
- Git - 智慧HTTP協議
- Git - 啞HTTP協議
- Git - SSH協議
- Git - Git協議
- Git - 在伺服器上獲取Git
- Git - 設定伺服器
- Git - 守護程序
- Git - GitWeb
- Git - GitLab
- Git - 第三方託管選項
- 分散式Git
- Git - 分散式工作流程
- Git - 為專案做貢獻
- Git - 維持專案
Git重置
在Git中,命令git reset可以用來將當前HEAD重置到指定狀態。
這有效地將工作目錄和索引重置為與之前的提交匹配,或者將當前分支指標切換到指定的提交。
它做了什麼?
1. 與反轉git add類似,此過程有效地撤銷了已安排提交的更改。
2. 重置後,我們可以使用git restore從索引更新工作樹,或者使用git restore --source=<tree-ish>同時將提交內容複製到索引和工作樹。
語法
git reset [-q] [<tree-ish>] [--] <pathspec>… git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
git reset [<tree-ish>] [--] <pathspec>… 命令將指定路徑 (<pathspec>) 的索引條目重置為與<tree-ish>處的狀態匹配,而不影響工作樹或當前分支。
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>…]
git reset --patch或-p命令允許在索引和<tree-ish>(預設為HEAD)之間互動式選擇塊。
透過反轉和將某些塊應用於索引,實際上撤消了已暫存提交的某些修改。
此功能允許選擇性地修改或刪除暫存區中的更改,類似於git add --patch。
git reset [<mode>] [<commit>]
命令git reset [<mode>] [<commit>] 根據<mode>修改索引和工作樹,並將當前分支頭重置為<commit>。
如果未指定<mode>,則預設值為--mixed。
--soft - 將修改保留為待提交的更改,並將分支頭移動到<commit>,而不改變工作樹或索引。
--mixed - 將更改標記為未暫存,並將索引重置為<commit>,同時保留工作樹中的修改。
--hard - 刪除<commit>之後的所有修改,並將工作樹和索引重置為<commit>。
--merge - Git處理未合併的索引項,重置索引,並更新<commit>和HEAD之間不同的工作樹檔案。
--keep - 與--merge類似,但如果對<commit>和HEAD之間不同的檔案進行了本地修改,則會停止。
--[no-]recurse-submodules - 更新工作樹時,它會更新子模組的工作樹以匹配超級專案中記錄的提交。
藉助這些引數,Git在將倉庫狀態重置到特定提交時,可以更靈活地處理對索引、工作樹和子模組的修改。
選項
git reset命令可以使用以下選項
-q 或 --quiet
使用-q或--quiet選項時,Git會抑制所有輸出,只顯示錯誤訊息。
--refresh / --no-refresh
Git的--refresh選項確保在混合重置(git reset --mixed)之後更新索引。
為了確保索引反映重置操作後的修改,預設情況下啟用此功能。
另一方面,混合重置後,--no-refresh會阻止此自動索引重新整理。
git reset --refresh
--pathspec-from-file=<file>
Git提供了一個名為--pathspec-from-file=<file>的選項,允許我們從檔案中指定pathspec模式,而不是直接從命令列指定。
如果<file>為-,則從標準輸入讀取。
Pathspec元素可以根據core.quotePath配置變數的指示進行引用,並在檔案中由LF或CR/LF分隔。
對於有效管理冗長或複雜的pathspec模式,此選項很有用。
--pathspec-file-nul
Git的--pathspec-file-nul選項改變了--pathspec-from-file的行為。
它指定將使用NUL字元來分隔檔案中的pathspec項;所有其他字元,包括換行符和引號,都將按字面解釋。
- 當pathspec模式包含必須完全保留在檔案中的特殊或複雜字元時,此選項很有用。
git reset --pathspec-from-file=file-list.txt --pathspec-file-nul
--pathspec-from-file=file-list.txt − 告訴Git從file-list.txt讀取檔案路徑。
--pathspec-file-nul − 指定file-list.txt中的檔案路徑由空字元(\0)而不是預設的換行符(\n)分隔。
--
帶有--的Git命令指示任何後續引數都應作為檔名或路徑而不是選項處理。
git rest -- <file>
它通常被稱為分隔符選項。它不是git reset獨有的,而是一個通用的Git約定,它告訴Git將--之後的任何內容解釋為檔案路徑。
--soft
它將HEAD移動到指定的提交,但保持暫存區和工作目錄不變。
更改仍然已暫存(索引不變)。
工作目錄中沒有顯示更改。
git reset --soft HEAD~1
--mixed
它將HEAD移動到指定的提交,並取消暫存任何已暫存的更改。
這是預設選項。
工作目錄保持不變。
暫存區重置為指定提交的狀態。
git reset --mixed HEAD~1
--hard
它將HEAD移動到指定的提交,並將暫存區和工作目錄都重置為與指定的提交匹配。
所有未提交的更改都將丟失。
git reset --hard <commit>
謹慎使用git reset,尤其是在使用--hard選項時,因為它可能導致更改丟失。
--keep <commit>
它將索引重置為指定的提交,但保留可以乾淨地應用於工作目錄的本地更改。
如果與本地更改衝突,重置將停止。
git reset --keep <commit>
--merge <commit>
它重置索引,但保留工作目錄中當前HEAD和指定提交之間不同的更改。
如果合併失敗,則使用此選項,將其重置回乾淨狀態。
git reset --merge HEAD~1
因此,根據您使用的選項,git reset命令可以應用於工作目錄、暫存區(索引)或提交歷史記錄。