當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下衷恭,然后去修復(fù)bug筐钟,修復(fù)后平道,再git stash pop厅贪,回到工作現(xiàn)場胸懈。
當(dāng)你接到一個修復(fù)一個代號101的bug的任務(wù)時禀挫,很自然地阐肤,你想創(chuàng)建一個分支issue-101來修復(fù)它脐供,但是浑塞,等等,當(dāng)前正在dev上進(jìn)行的工作還沒有提交:
git status
------------------------------------
# On branch dev
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
# 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.txt
#
并不是你不想提交政己,而是工作只進(jìn)行到一半酌壕,還沒法提交,預(yù)計(jì)完成還需1天時間匹颤。但是仅孩,必須在兩個小時內(nèi)修復(fù)該bug,怎么辦印蓖?
Git還提供了一個stash功能辽慕,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:
git stash
現(xiàn)在赦肃,用git status查看工作區(qū)溅蛉,就是干凈的,因此可以放心地創(chuàng)建分支來修復(fù)bug公浪。
首先確定要在哪個分支上修復(fù)bug,假定需要在master分支上修復(fù)船侧,就從master創(chuàng)建臨時分支:
git checkout master
git checkout -b issue-101
現(xiàn)在修復(fù)bug欠气,需要把“Git is free software ...”改為“Git is a free software ...”,然后提交:
git add .
git commit -m '修復(fù)完成'
修復(fù)完成后镜撩,切換到master分支预柒,并完成合并,最后刪除issue-101分支:
git checkout master
git merge --no-ff -m '修復(fù)完成-合并' issue-101
git branch -d issue-101
太棒了袁梗,原計(jì)劃兩個小時的bug修復(fù)只花了5分鐘宜鸯!現(xiàn)在,是時候接著回到dev分支干活了遮怜!
git checkout dev
git status
工作區(qū)是干凈的淋袖,剛才的工作現(xiàn)場存到哪去了?用git stash list命令看看
git stash list
工作現(xiàn)場還在锯梁,Git把stash內(nèi)容存在某個地方了即碗,但是需要恢復(fù)一下,有兩個辦法
一是用git stash apply恢復(fù)陌凳,但是恢復(fù)后剥懒,stash內(nèi)容并不刪除,你需要用git stash drop來刪除冯遂;
另一種方式是用git stash pop蕊肥,恢復(fù)的同時把stash內(nèi)容也刪了
git stash pop
你可以多次stash谒获,恢復(fù)的時候蛤肌,先用git stash list查看,然后恢復(fù)指定的stash批狱,用命令
git stash apply stash@{0}