當(dāng)你代碼寫的正嗨,突然老板跑過來對(duì)你說换棚,有個(gè)緊急線上bug要修復(fù)没炒。所以你必須要先切換到master分支涛癌,但是你目前在develop分支上,而且有一堆文件改動(dòng)還未提交送火,你不想僅僅因?yàn)橐械街鞣种迋€(gè)bug就為做了一半的工作創(chuàng)建一次提交拳话,那么你可以用git stash 命令把你目前未提交的修改先儲(chǔ)藏起來,等修好bug种吸,從master分支上切回develop分支之后弃衍,再把改動(dòng)從儲(chǔ)藏中恢復(fù)出來,然后繼續(xù)開發(fā)
通過執(zhí)行g(shù)it status我們會(huì)看到工作區(qū)中有一些文件改動(dòng):
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致坚俗。
要提交的變更:
? (使用 "git reset HEAD <文件>..." 以取消暫存)
修改:? ? index.html
尚未暫存以備提交的變更:
? (使用 "git add <文件>..." 更新要提交的內(nèi)容)
? (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))
修改:? ? index.scss
執(zhí)行g(shù)it stash 儲(chǔ)藏當(dāng)前的修改
$ git stash
保存工作目錄和索引狀態(tài) WIP on develop: 9c0e4dc Update index.scss
儲(chǔ)藏成功之后镜盯,在通過git status查看狀態(tài),發(fā)現(xiàn)工作區(qū)已經(jīng)干凈了
$ git status
位于分支 develop
您的分支與上游分支 'origin/develop' 一致猖败。
無文件要提交速缆,干凈的工作區(qū)
這個(gè)時(shí)候我們就可以放心的切換到其他分支了,等臨時(shí)的工作忙完之后恩闻,再切換回develop分支恢復(fù)儲(chǔ)藏
查看儲(chǔ)藏列表:
$ git stash list
stash@{0}: WIP on develop: 9c0e4dc Update index.scss
恢復(fù)儲(chǔ)藏艺糜,如果不指定一個(gè)貯藏,Git 認(rèn)為指定的是最近的貯藏
$ git stash apply
位于分支 develop
您的分支與上游分支 'origin/develop' 一致。
尚未暫存以備提交的變更:
? (使用 "git add <文件>..." 更新要提交的內(nèi)容)
? (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))
修改:? ? index.html
修改:? ? index.scss
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
當(dāng)然你也可以通過儲(chǔ)藏的名字恢復(fù)儲(chǔ)藏:
$ git stash apply stash@{0}
位于分支 develop
您的分支與上游分支 'origin/develop' 一致破停。
尚未暫存以備提交的變更:
? (使用 "git add <文件>..." 更新要提交的內(nèi)容)
? (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))
修改:? ? index.html
修改:? ? index.scss
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
用apply 恢復(fù)儲(chǔ)藏的內(nèi)容之后翅楼,并不會(huì)把儲(chǔ)藏刪除,我們可以看到這個(gè)儲(chǔ)藏還在:
$ git stash list
stash@{0}: WIP on develop: 9c0e4dc Update index.scss
我們可以用git stash drop命令來刪除無用的儲(chǔ)藏
$ git stash drop stash@{0}
丟棄了 stash@{0} (c0264554be0a5e247c9079d69911a4f8d87d6432)
如果想在應(yīng)用儲(chǔ)藏的同時(shí)把儲(chǔ)藏刪除真慢,可以使用git stash pop 命令毅臊,可以看到命令執(zhí)行成功之后,最后一行顯示丟棄了儲(chǔ)藏:
$? git stash pop
位于分支 develop
您的分支與上游分支 'origin/develop' 一致黑界。
尚未暫存以備提交的變更:
? (使用 "git add <文件>..." 更新要提交的內(nèi)容)
? (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))
修改:? ? index.html
修改:? ? index.scss
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丟棄了 refs/stash@{0} (61342da090d0b7c11d669133d071961c3984edb1)
如果你在儲(chǔ)藏文件的時(shí)候管嬉,一部分文件在工作區(qū),一部分文件在暫存區(qū)园爷,你直接執(zhí)行g(shù)it stash apply恢復(fù)儲(chǔ)藏宠蚂,那么文件都會(huì)被恢復(fù)到工作區(qū)。如果你想在恢復(fù)儲(chǔ)藏的時(shí)候童社,完全還原以前的暫存狀態(tài)求厕,可以加上--index 參數(shù)
$ git stash apply --index
位于分支 develop
您的分支與上游分支 'origin/develop' 一致。
要提交的變更:
? (使用 "git reset HEAD <文件>..." 以取消暫存)
修改:? ? index.html
尚未暫存以備提交的變更:
? (使用 "git add <文件>..." 更新要提交的內(nèi)容)
? (使用 "git checkout -- <文件>..." 丟棄工作區(qū)的改動(dòng))
修改:? ? index.scss
你在當(dāng)前分支儲(chǔ)藏的修改不僅可以恢復(fù)到當(dāng)前分支扰楼,還可以恢復(fù)到任何分支
想要交流學(xué)習(xí)其他開發(fā)技術(shù)呀癣,請(qǐng)關(guān)注我微信公眾號(hào) 全棧師否: