git stash命令


git stash命令

當切換分支的時候,如果有未提交的變更記錄,此時系統會阻止你切換分支,解決方法有兩種。

一種是先將代碼commit,切換分支修改完畢,再次切換回原分支,利用amend命令,取消commit,版本回退,記錄重新回復。

第二種方式:利用git stash命令,先將數據存到緩存,切換分支修改完畢,切換原分支,利git stash apply 命令將緩存數據恢復。

git stash 使用背景

  • 發現有一個類是多余的,想刪掉它又擔心以后需要查看它的代碼,想保存它但又不想增加一個臟的提交。這時就可以考慮git stash。
  • 使用git的時候,我們往往使用分支(branch)解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用git stash就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修Bug,等到修完Bug,提交到服務器上后,再使用git stash apply將以前一半的工作應用回來。
  • 經常有這樣的事情發生,當你正在進行項目中某一部分的工作,里面的東西處於一個比較雜亂的狀態,而你想轉到其他分支上進行一些工作。問題是,你不想提交進行了一半的工作,否則以后你無法回到這個工作點。解決這個問題的辦法就是git stash命令。儲藏(stash)可以獲取你工作目錄的中間狀態——也就是你修改過的被追蹤的文件和暫存的變更——並將它保存到一個未完結變更的堆棧中,隨時可以重新應用。

命令

git stash

git stash會把所有未提交的修改(包括暫存的和非暫存的)都保存起來,用於后續恢復當前工作目錄。

實際應用中推薦給每個stash加一個message,用於記錄版本,使用git stash save取代git stash命令。

恢復緩存git stash pop或者git stash apply

git stash pop命令恢復之前緩存的工作目錄。這個指令將緩存堆棧中的第一個stash刪除,並將對應修改應用到當前的工作目錄下。

你也可以使用
git stash apply
命令,將緩存堆棧中的stash多次應用到工作目錄中,但並不刪除stash拷貝

查看現有stash

可以使用git stash list命令

移除stash

可以使用git stash drop命令,后面可以跟着stash名字,或者使用git stash clear命令,刪除所有緩存的stash。

從stash創建分支

如果你儲藏了一些工作,暫時不去理會,然后繼續在你儲藏工作的分支上工作,你在重新應用工作時可能會碰到一些問題。如果嘗試應用的變更是針對一個你那之后修改過的文件,你會碰到一個歸並沖突並且必須去化解它。如果你想用更方便的方法來重新檢驗你儲藏的變更,你可以運行 git stash branch,這會創建一個新的分支,檢出你儲藏工作時的所處的提交,重新應用你的工作,如果成功,將會丟棄儲藏。

暫存未跟蹤或忽略的文件

默認情況下,git stash會緩存下列文件:

  • 添加到暫存區的修改(staged changes)
  • Git跟蹤的但並未添加到暫存區的修改(unstaged changes)

但不會緩存一下文件:

  • 在工作目錄中新的文件(untracked files)
  • 被忽略的文件(ignored files)

git stash命令提供了參數用於緩存上面兩種類型的文件。使用
-u或者--include-untracked可以stash untracked文件。使用
-a或者--all命令可以stash當前目錄下的所有修改。


免責聲明!

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



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