Git Stash恢復

一、Git Stash是什麼?

Git stash是一個非常有用的命令,它可以讓你「儲藏」當前的工作,並且自動切換到乾淨的工作目錄。這個功能通常用於臨時存儲你的工作,以便你可以在切換分支或者處理其他問題時,隨時返回到原來的狀態。它可以保存未提交的代碼,包括修改、暫存和未跟蹤的文件。

二、如何使用Git Stash儲藏?

使用「git stash」命令可以將所有未提交的修改(包括已暫存和未暫存的修改)保存到一個「儲藏」中。

$ git stash
Saved working directory and index state WIP on master: 53c09c3 added the index file
HEAD is now at 53c09c3 added the index file

我們可以使用「git stash list」命令列出所有的儲藏:

$ git stash list
stash@{0}: WIP on master: 53c09c3 added the index file

我們可以使用「git stash apply」命令,將儲藏中的修改應用到當前分支,相當於恢復了之前被暫存的代碼。我們也可以指定儲藏的ID號來應用某個特定的儲藏。如果不指定ID號,則默認使用最新的儲藏來恢復。

$ git stash apply
# 等價於
$ git stash apply stash@{0}

如果你不想保留儲藏,可以使用「git stash drop」命令。如果你希望應用一個儲藏並且將其從列表中刪除,可以使用「git stash pop」命令。

$ git stash drop stash@{0}
# 或者
$ git stash pop

三、如何使用Git Stash恢復被清理的Stash?

有時候我們可能會意外清理掉了自己儲藏的內容,這時候我們需要用到另一個命令「git fsck」來檢查是否有文件被清理過。在執行該命令之前,需要確定儲藏遺失的提交ID。

$ git fsck --full --no-reflog

然後你應該看到一個類似下面這樣的輸出:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (392/392), done.
broken link from    tree d2de8bf97b21f2e74251e0a8facfbe7d9d4c3e5e
              to    blob 2fdea27ad5c5a54f0520d8e78621b1c9054cb5a9
broken link from    tree 49fa1ad36b6e0a31b4c82015f9b4c59675aad2c2
              to    blob 2fdea27ad5c5a54f0520d8e78621b1c9054cb5a9
dangling commit ed961247cb59473b5ad7e0993f21da5f3b294de3
dangling commit 6d0153cd180afe4d5769c59acd176a2f72a187c7

這裡的「dangling commit」中包括儲藏的提交內容。我們可以使用「git show」命令來查看這個提交的詳細信息:

$ git show ed961247cb59473b5ad7e0993f21da5f3b294de3

輸出的信息中應該包括你想要恢復的內容。然後,我們可以使用「git cherry-pick」命令將這個提交應用到工作目錄中:

$ git cherry-pick ed961247cb59473b5ad7e0993f21da5f3b294de3

四、如何使用Git Stash恢復未保存的修改?

有時我們可能會在工作目錄中進行了一些修改但是並沒有執行任何提交操作,這時候可以使用以下命令將這些修改儲藏起來,以備後續恢復使用:

$ git stash save "message"

然後,我們可以使用「git stash list」命令查看所有的儲藏列表:

$ git stash list

現在我們可以使用「git stash apply」命令來恢復儲藏的內容:

$ git stash apply
# 或者應用某個特定的儲藏
$ git stash apply stash@{2}

之後,我們可以繼續在工作目錄中進行修改或者提交操作。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/237714.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:06
下一篇 2024-12-12 12:06

相關推薦

  • Git secbit:一種新型的安全Git版本

    Git secbit是一種新型的安全Git版本,它在保持Git原有功能的同時,針對Git存在的安全漏洞做出了很大的改進。下面我們將從多個方面對Git secbit做詳細地闡述。 一…

    編程 2025-04-29
  • 如何優化 Git 性能和重構

    本文將提供一些有用的提示和技巧來優化 Git 性能並重構代碼。Git 是一個非常流行的版本控制系統,但是在處理大型代碼倉庫時可能會有一些性能問題。如果你正在處理這樣的問題,本文將會…

    編程 2025-04-29
  • Idea2022變更Git地址

    本文將從以下幾個方面對Idea2022變更Git地址進行詳細闡述: 一、GitHub上修改Git倉庫地址 1、登錄GitHub,找到需要修改的Git倉庫 2、在代碼頁面點擊右上角的…

    編程 2025-04-28
  • 通過提交信息搜索-使用git

    本篇文章重點講解如何使用git通過提交信息來搜索。我們將從多個方面介紹如何使用git來搜索提交信息,並提供相應的代碼示例以供參考。 一、搜索方式 Git提供了三種搜索方式,分別為:…

    編程 2025-04-27
  • Java項目Git發布流程規範

    本文旨在介紹Java項目在使用Git進行發布時的流程規範。Git作為一個版本控制工具,其功能十分強大,但是對於Java項目進行發布時,需要我們根據標準化的流程規範來執行操作,以確保…

    編程 2025-04-27
  • 使用Pycharm從Git上Clone項目的步驟

    在本篇文章中,我們將會詳細介紹如何使用Pycharm工具從Git上Clone項目。 一、打開Pycharm並進入Welcome界面 首先,我們需要打開Pycharm工具,並進入We…

    編程 2025-04-27
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Git Tag命令

    一、Tag是什麼 Tag是一個指向Git倉庫中某個commit對象的指針,通常用於標記軟體版本發布的重要時間點。Tag不同於分支,分支可以移動並在其上進行提交;而Tag是指向特定提…

    編程 2025-04-25
  • Git push 被拒絕該如何解決

    Git push 被拒絕是Git使用過程中常見的問題之一,本文將從多個方面介紹Git push 被拒絕的常見原因及解決方法。 一、導致git push 被拒絕的原因及解決方法 Gi…

    編程 2025-04-25
  • 學習Git分支

    一、初識learngitbranching learngitbranching 是一個互動式學習Git分支的網站,旨在幫助用戶更好地理解分支工作流程和提交歷史。該網站提供了一個可交…

    編程 2025-04-25

發表回復

登錄後才能評論