想要獲取更多文章可以訪問我的博客 - 代碼無止境。
在開發(fā)的過程中可能會(huì)經(jīng)常出現(xiàn)下面這種情況,我們正在開發(fā)某個(gè)功能,當(dāng)前分支的內(nèi)容比較亂,不太適合提交,而此時(shí)我們需要切換到其他分支上處理一些事情。這個(gè)時(shí)候該怎么辦呢?難道是將修改先備份然后丟棄修改再切換到另外的分支上?答案肯定是否定的,今天我們就來介紹如何使用git stash
命令來完美解決這種窘境。
準(zhǔn)備
首先我們需要準(zhǔn)備一個(gè)git倉庫,并準(zhǔn)備兩個(gè)分支(master
和dev
):
mkdir git-test
cd git-test
git init
touch README.md
git add README.md
git commit -m "第一次提交"
git checkout -b dev
使用stash命令
在上一步,我們已經(jīng)切換到dev
了,現(xiàn)在我們在README.md
上隨便修改一點(diǎn)東西來模擬凌亂的分支:
$ git status
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
現(xiàn)在假如我們急需切換到master
分支上處理一些事情,所以我們需要使用git stash
來藏儲(chǔ)dev
分支上的修改。
git stash
然后我們再執(zhí)行一下git status來看下dev上的情況:
$ git status
On branch dev
nothing to commit, working tree clean
我們會(huì)發(fā)現(xiàn)dev
分支變干干凈凈了,因?yàn)閯倓偟男薷囊呀?jīng)被藏儲(chǔ)了。那么或許你會(huì)問,我們應(yīng)該怎么查看有哪些藏儲(chǔ)呢?當(dāng)我們在master
分支上處理完事情后回到dev
分支又該如何恢復(fù)我們藏儲(chǔ)的內(nèi)容呢?首先我們執(zhí)行git stash list
我們查看所有的藏儲(chǔ)記錄:
$ git stash list
stash@{0}: WIP on dev: 9ad7304 第一次提交
如何恢復(fù)呢?可以使用git stash pop
恢復(fù)第一條存儲(chǔ)記錄,也可以使用git stash apply stash@{n}
命令來恢復(fù)指定的存儲(chǔ)記錄。
$ git stash apply stash@{0}
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
然后我們就會(huì)發(fā)現(xiàn)剛剛的修改恢復(fù)回來了。但是此時(shí)我們再次執(zhí)行git stash list
會(huì)發(fā)現(xiàn)剛剛恢復(fù)的藏儲(chǔ)記錄還存在,我們需要執(zhí)行git stash drop stash@{n}
刪掉它。
$ git stash drop stash@{0}
Dropped stash@{0} (8c0b9fa5bc217c7876ab825147ee76712364887e)
再執(zhí)行git stash list
的時(shí)候就會(huì)發(fā)現(xiàn)這條藏儲(chǔ)被刪除了,當(dāng)然如果我們恢復(fù)的是棧頂?shù)牟貎?chǔ)記錄的話我建議直接使用git stash pop
命令,因?yàn)樵诨謴?fù)的同時(shí)會(huì)自動(dòng)刪除掉棧頂?shù)牟貎?chǔ)記錄。