Git 暫存



git stash 命令用於在不提交的情況下儲存工作,透過臨時儲存工作目錄中尚未準備好提交的更改。

這有助於我們在活動之間切換或暫時擱置未完成的修改,而無需堆積提交歷史。

它允許我們撤銷自上次提交以來在索引和工作目錄中所做的所有更改,將我們的工作目錄恢復到其原始狀態。

主要特點

臨時儲存工作 - 暫存和未暫存的更改都可以臨時儲存。

多個暫存 - 可以儲存多組更改,並以任意順序重新應用。

暫存列表 - 可以一次檢視所有暫存更改的列表。

應用暫存 - 稍後可以使用applypop選項應用暫存的更改。git stash pop在應用更改後會刪除暫存。

暫存特定更改 - 只能暫存更改的一部分。

暫存預設使用“WIP on branchname...”標籤建立,但我們可以新增更具資訊性的語句。

  • 可以使用 reflog 表示法(stash@{1}stash@{2.hours.ago}等)檢索舊的暫存,最新的暫存儲存在refs/stash中。

  • 此外,可以透過索引stash@{n}訪問暫存,其中{n}是暫存編號。

命令

暫存更改的通用命令是git stash

git stash

push

命令git stash push刪除索引和工作目錄中最近的修改,並將它們儲存在一個新的暫存中。

  • 我們可以選擇向暫存新增詳細的<message>以指示其中包含的內容。

  • 刪除push限制非選項引數以避免意外暫存,但允許快速快照。

  • 命令git stash -p允許互動式選擇要暫存的修改;它是git stash push -p的快捷方式。

  • 可以在--之後放置路徑規範元件,以更清楚地說明要暫存哪些檔案或修改。

save

命令git stash save已棄用,應替換為git stash push

git stash save
  • git stash push相反,git stash save不支援指定單個檔案(路徑規範)。

  • 傳遞給git stash save的任何其他輸入都將連線起來以生成暫存訊息,而不是路徑規範。

list

執行git stash list將顯示當前所有儲存的暫存條目。

git stash list
  • 每個暫存條目按順序命名為stash@{n},其中stash@{0}表示最新的暫存。

  • 它顯示建立每個暫存時正在使用的分支名稱。

  • 每個暫存條目都包含作為其基礎的提交的簡要摘要。

show

git stash show命令顯示暫存條目中記錄的更改。

git stash show
  • 預設情況下,它顯示更改摘要(diffstat),但使用<diff-options>,它可以使用git diff支援的任何格式顯示實際更改。

  • 控制統計資訊和補丁顯示預設行為的配置變數包括stash.showStatstash.showPatch

  • 顯示暫存更新時,stash.showIncludeUntracked設定控制是否預設啟用--include-untracked

apply

命令git stash apply將暫存中的更改應用於當前的工作樹和索引(暫存區)。

git stash apply
  • 它不會像git stash pop那樣從暫存列表中刪除暫存。

  • 我們可以使用任何類似於git stash pushgit stash create生成的暫存的提交,或者透過提供其名稱(stash@{n})來指定特定的暫存條目。

  • 要更安靜地操作並減少輸出冗餘,請使用-q--quiet

branch

從建立<stash>的提交開始,建立一個名為<branchname>的新分支。

git stash branch
  • 使用儲存的修改更新工作樹和新分支的索引。

  • <stash>stash@{<revision>}格式輸入時,應用後會刪除該暫存。

  • 非常適合快速分支帶有暫存的更改,尤其是在由於衝突導致簡單的git stash apply變得複雜時。

clear

git stash clear命令將刪除暫存中的所有條目。

git stash clear
  • 這些條目在刪除後容易被剪下,可能無法恢復。

drop

git stash drop命令將從暫存條目列表中刪除一個暫存記錄。

git stash drop
  • 要抑制確認訊息,請將其與-q--quiet選項結合使用。

create

命令git stash create生成一個名為暫存條目的普通提交物件,並在不將其儲存到 ref 名稱空間的情況下返回其物件名稱。

git stash create
  • git stash push相比,此功能使用頻率較低,主要用於指令碼編寫目的。

store

git stash store命令透過將使用git stash create建立的暫存(一個懸空合併提交)儲存到暫存 ref 中來修改暫存 reflog。

git stash store
  • 通常情況下,git stash push更適合於生成和儲存暫存。

  • 此命令主要用於指令碼編寫目的,不直接使用。

選項

git stash命令支援以下選項

-a

--all

  • 當與git stash pushgit stash save結合使用時,-a--all選項將暫存所有更改,包括暫存、修改和未跟蹤的檔案,包括通常被忽略的檔案。

  • 它還使用git clean在暫存後清理未跟蹤的檔案。

-u

--include-untracked

--no-include-untracked

  • -u / --include-untracked - 當與git stash pushgit stash save結合使用時,將暫存所有更改、暫存和未跟蹤的檔案,包括通常被忽略的檔案。

    然後使用git clean清理它們。

    當與git stash show結合使用時,在暫存條目的差異中顯示未跟蹤的檔案。

  • --no-include-untracked - 與-u相反,此命令防止在使用上述命令時在差異中顯示或暫存未跟蹤的檔案。

--only-untracked

  • 僅顯示暫存條目中的未跟蹤檔案作為差異的一部分;僅限於git stash show命令。

--index

  • 當與git stash popgit stash apply命令結合使用時,它會嘗試將修改重新應用到索引(暫存區)以及工作樹。

-k

--keep-index

--no-keep-index

  • 當與git stash pushgit stash save結合使用時,選項-k / --keep-index :- 僅暫存未暫存的更新,同時保留已新增到索引(暫存區)的所有更改。

  • 與-k相反,當與上述命令結合使用時,--no-keep-index會暫存所有修改,包括已在索引中的修改。

git stash臨時暫存工作目錄中的所有更改。可以在需要時重新應用暫存的更改。

廣告