天天看點

Git -- Stash

git stash(儲藏)

準備好項目, 然後修改某個檔案.

Git -- Stash

這時, 如果我不準備commit這個檔案的話, 我需要立即修改改另外一個檔案.

為了儲存這第一個變化, 就可以使用git stash指令.

“‘stash”“可以擷取你工作目錄的中間狀态——也就是你修改過的被追蹤的檔案和暫存的變更——并将它儲存到一個未完結變更的堆棧中,随時可以重新應用。

git stash save
git stash      

可以不加save參數, 因為執行git stash 預設就帶着save參數.

Git -- Stash

可以看到沒有需要commit的變化了.

打開修改的檔案, 又恢複到原來的樣子了.

然後我再做一些修改, 修改另一個檔案:

Git -- Stash

然後commit:

Git -- Stash

現在是clean working directory.

那麼剛才的stash 怎麼辦呢?

git stash apply.

Git -- Stash

這個指令會顯示出來目前的狀态. 這時打開我第一次修改的檔案, 發現我做出的變化又出現了.

然後 commit即可:

Git -- Stash

但是到現在還沒完, 下面執行這個指令:

git stash list:

Git -- Stash

因為我們已經apply這個stash了, 是以可以把它删掉了:

git stash drop, 它會删除最新的一個stash.

Git -- Stash

Stash Untracked / Pop.

git stash 隻對被追蹤的檔案起作用.

修改某個被追蹤的檔案.

然後添加一個檔案, 這個檔案暫時git還沒有去追蹤.

Git -- Stash

如果現在執行git stash:

Git -- Stash

那麼它隻會儲存被追蹤檔案的變化. 而未追蹤的檔案依然可以看到:

Git -- Stash

現在把儲存恢複:

git stash apply:

Git -- Stash

然後删除這個stash:

Git -- Stash

現在有幾種可選的做法:

1. 可以把未追蹤的檔案添加到staging 區.

2. 或者你仍想把這個未追蹤的檔案儲存起來, 那麼可以使用git stash 加參數, 下面就做這個:

git stash -u. 

Git -- Stash

現在就是clean working directory了.

Git -- Stash

然後編輯另一個檔案, 然後commit:

Git -- Stash

然後我在apply之前的stash, 這次我将使用一個更直接的指令:

git stash pop 它相當于這兩個指令: git stash apply 和 git stash drop (apply并drop上一個stash).

Git -- Stash

然後我删除z.txt. commit.

多個Stash.

修改某個檔案, 然後執行stash, 這次加上save參數, 并指定資訊:

git stash save "xxx".

Git -- Stash

再修改另一個檔案, 并stash:

Git -- Stash

然後再修改上面的一個檔案, 并stash:

Git -- Stash

列出stash:

Git -- Stash

注意, 這裡0表示最新的一個stash.

檢視某個stash:

git stash show stash@{1}.

Git -- Stash

具體恢複某一個stash:

git stash apply stash@{1}.

Git -- Stash

git stash drop stash@{1}.

Git -- Stash

剩下的stash的索引可能會更新一下.

如果剩下的stash我不需要了:

git stash clear:

Git -- Stash

Stash到分支.

現在項目的狀态是有一個變化還沒有stage:

Git -- Stash

我再修改其他幾個檔案:

Git -- Stash

我把README.md添加到staging區:

Git -- Stash

我再添加一個新檔案 z1.txt:

Git -- Stash

現在檔案的狀态有3種, 等待被commit的, 沒有 stage的, 未被追蹤的.

首先執行stash 所有檔案:

Git -- Stash

然後我把這個stash apply到分支上:

git stash branch xxx分支名.

Git -- Stash

這個過程發生了好幾件事:

1.建立了一個分支, 并切換到這個分支了

2.apply 這個stash到這個分支

3.删除了這個stash.

Git -- Stash

檢視狀态:

Git -- Stash

然後commit, 并合并到master分支:

Git -- Stash

最後删除分支:

Git -- Stash

下面是我的關于ASP.NET Core Web API相關技術的公衆号--草根專欄:

Git -- Stash