git stash(儲藏)
準備好專案, 然後修改某個檔案.
這時, 如果我不準備commit這個檔案的話, 我需要立即修改改另外一個檔案.
為了儲存這第一個變化, 就可以使用git stash命令.
“‘stash”“可以獲取你工作目錄的中間狀態——也就是你修改過的被追蹤的檔案和暫存的變更——並將它儲存到一個未完結變更的堆疊中,隨時可以重新應用。
git stash save
git stash
可以不加save引數, 因為執行git stash 預設就帶著save引數.
可以看到沒有需要commit的變化了.
開啟修改的檔案, 又恢復到原來的樣子了.
然後我再做一些修改, 修改另一個檔案:
然後commit:
現在是clean working directory.
那麼剛才的stash 怎麼辦呢?
git stash apply.
這個命令會顯示出來當前的狀態. 這時開啟我第一次修改的檔案, 發現我做出的變化又出現了.
然後 commit即可:
但是到現在還沒完, 下面執行這個命令:
git stash list:
因為我們已經apply這個stash了, 所以可以把它刪掉了:
git stash drop, 它會刪除最新的一個stash.
Stash Untracked / Pop.
git stash 只對被追蹤的檔案起作用.
修改某個被追蹤的檔案.
然後新增一個檔案, 這個檔案暫時git還沒有去追蹤.
如果現在執行git stash:
那麼它只會儲存被追蹤檔案的變化. 而未追蹤的檔案依然可以看到:
現在把儲存恢復:
git stash apply:
然後刪除這個stash:
現在有幾種可選的做法:
1. 可以把未追蹤的檔案新增到staging 區.
2. 或者你仍想把這個未追蹤的檔案儲存起來, 那麼可以使用git stash 加引數, 下面就做這個:
git stash -u.
現在就是clean working directory了.
然後編輯另一個檔案, 然後commit:
然後我在apply之前的stash, 這次我將使用一個更直接的命令:
git stash pop 它相當於這兩個命令: git stash apply 和 git stash drop (apply並drop上一個stash).
然後我刪除z.txt. commit.
多個Stash.
修改某個檔案, 然後執行stash, 這次加上save引數, 並指定資訊:
git stash save "xxx".
再修改另一個檔案, 並stash:
然後再修改上面的一個檔案, 並stash:
列出stash:
注意, 這裡0表示最新的一個stash.
檢視某個stash:
git stash show stash@{1}.
具體恢復某一個stash:
git stash apply stash@{1}.
然後刪除這個stash:
git stash drop stash@{1}.
剩下的stash的索引可能會更新一下.
如果剩下的stash我不需要了:
git stash clear:
Stash到分支.
現在專案的狀態是有一個變化還沒有stage:
我再修改其他幾個檔案:
我把README.md新增到staging區:
我再新增一個新檔案 z1.txt:
現在檔案的狀態有3種, 等待被commit的, 沒有 stage的, 未被追蹤的.
首先執行stash 所有檔案:
然後我把這個stash apply到分支上:
git stash branch xxx分支名.
這個過程發生了好幾件事:
1.建立了一個分支, 並切換到這個分支了
2.apply 這個stash到這個分支
3.刪除了這個stash.
檢視狀態:
然後commit, 併合併到master分支:
最後刪除分支: