git stash 保存和恢復進度


1. stash當前修改
git stash會把所有未提交的修改(包括暫存的和非暫存的)都保存起來,用於后續恢復當前工作目錄。
比如下面的中間狀態,通過git stash命令推送一個新的儲藏,當前的工作目錄就干凈了。

$ git status
On branch master
Changes to be committed:

new file:   style.css

Changes not staged for commit:

modified:   index.html

$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage

$ git status
On branch master
nothing to commit, working tree clean
需要說明一點,stash是本地的,不會通過git push命令上傳到git server上。
實際應用中推薦給每個stash加一個message,用於記錄版本,使用git stash save取代git stash命令。示例如下:

$ git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 現在位於 296e8d4 remove unnecessary postion reset in onResume function
$ git stash list
stash@{0}: On autoswitch: test-cmd-stash
2. 重新應用緩存的stash
可以通過git stash pop命令恢復之前緩存的工作目錄,輸出如下:

$ git status
On branch master
nothing to commit, working tree clean
$ git stash pop
On branch master
Changes to be committed:

    new file:   style.css

Changes not staged for commit:

    modified:   index.html

Dropped refs/stash@{0} (32b3aa1d185dfe6d57b3c3cc3b32cbf3e380cc6a)
這個指令將緩存堆棧中的第一個stash刪除,並將對應修改應用到當前的工作目錄下。
你也可以使用git stash apply命令,將緩存堆棧中的stash多次應用到工作目錄中,但並不刪除stash拷貝。命令輸出如下:

$ git stash apply
On branch master
Changes to be committed:

    new file:   style.css

Changes not staged for commit:

    modified:   index.html
3. 查看現有stash
可以使用git stash list命令,一個典型的輸出如下:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
在使用git stash apply命令時可以通過名字指定使用哪個stash,默認使用最近的stash(即stash@{0})。

4. 移除stash
可以使用git stash drop命令,后面可以跟着stash名字。下面是一個示例:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
或者使用git stash clear命令,刪除所有緩存的stash。

5. 查看指定stash的diff
可以使用git stash show命令,后面可以跟着stash名字。示例如下:

$ git stash show
 index.html | 1 +
 style.css | 3 +++
 2 files changed, 4 insertions(+)
在該命令后面添加-p或--patch可以查看特定stash的全部diff,如下:

$ git stash show -p
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..d92368b
--- /dev/null
+++ b/style.css
@@ -0,0 +1,3 @@
+* {
+  text-decoration: blink;
+}
diff --git a/index.html b/index.html
index 9daeafb..ebdcbd2 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
+<link rel="stylesheet" href="style.css"/>
6. 從stash創建分支
如果你儲藏了一些工作,暫時不去理會,然后繼續在你儲藏工作的分支上工作,你在重新應用工作時可能會碰到一些問題。如果嘗試應用的變更是針對一個你那之后修改過的文件,你會碰到一個歸並沖突並且必須去化解它。如果你想用更方便的方法來重新檢驗你儲藏的變更,你可以運行 git stash branch,這會創建一個新的分支,檢出你儲藏工作時的所處的提交,重新應用你的工作,如果成功,將會丟棄儲藏。

$ git stash branch testchanges
Switched to a new branch "testchanges"
# On branch testchanges
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   index.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   lib/simplegit.rb
#
Dropped refs/stash@{0} (f0dfc4d5dc332d1cee34a634182e168c4efc3359)
這是一個很棒的捷徑來恢復儲藏的工作然后在新的分支上繼續當時的工作。

7. 暫存未跟蹤或忽略的文件
默認情況下,git stash會緩存下列文件:

添加到暫存區的修改(staged changes)
Git跟蹤的但並未添加到暫存區的修改(unstaged changes)
但不會緩存一下文件:

在工作目錄中新的文件(untracked files)
被忽略的文件(ignored files)
git stash命令提供了參數用於緩存上面兩種類型的文件。使用-u或者--include-untracked可以stash untracked文件。使用-a或者--all命令可以stash當前目錄下的所有修改。

至於git stash的其他命令建議參考Git manual。

  

git stash     //保存當前工作進度,會把暫存區和工作區的改動保存起來。
git stash save 'message.....'



git stash show      //查看剛才暫存的修改
git stash list        //查看暫存區的所有暫存修改
 

git stash pop       //取出最近一次暫存並刪除記錄列表中對應記錄
git stash pop stash@{1}  //恢復指定的進度到工作區。stash_id是通過git stash list命令得到的 


git stash apply stash@{X} //取出相應的暫存不刪除記錄列表中對應記錄

git stash drop stash@{X} //將記錄列表中取出的對應暫存記錄刪除
git stash drop [stash_id]  //刪除一個存儲的進度。如果不指定stash_id,則默認刪除最新的存儲進度
 

git stash clear    //刪除所有存儲的進度。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM