在實際項目開發中,總會遇到代碼寫到一半(沒法去打
commit
),去開啟新的分支 修複 Bug 或者 增加功能 的情況。如果不處理,未修改的代碼就會被帶入臨時建立的新的分支,沒寫完的代碼 和 要修複的代碼混合在一起,絕對苦逼。而 Git 中的
stash
就是用來對付這種情況。
1. 初識 git stash
git stash
stash
在英文中的意思是:隐藏。在 Git 代碼管理的過程中,它的作用也是隐藏沒完成的代碼,防止它幹擾 别人 或者 新分支的工作。
關于
git stash
,常用指令如下:
指令 | 作用 |
---|---|
git stash | 隐藏目前的工作現場, 此時, git status的結果是 clean |
git stash list | 檢視所有隐藏, 每一行的冒号前面的字元串就是辨別此隐藏的id |
git stash apply | 重新顯示辨別為 id 的隐藏 |
git stash drop | git apply恢複隐藏後, 需要手動删除 list 清單中的記錄 |
git stash pop | Apply last stash and remove it from the list |
2. 應用與實戰
假設:正當我在 master 分支上寫着文檔時候(_沒有完成、沒有送出_),同僚發現
hello.py
這個腳本有問題,緊急報告給我進行修複。
收到報告,下意識就是開一個 debug 分支來處理 bug。但是,現在的文檔沒完成,自然無法送出,又不能把沒送出的東西帶入到新建立的 debug 分支(_執意如此,我也沒辦法 : )_)。目前,status 如下:
為了達到目的,分為以下幾步:
- 隐藏修改:
:git stash
- 建立新分支:
:git branch debug
- 在
分支上修複 bug, 并且将修改添加到 log 中 :debug
- 回到
分支, 合并master
分支的修改, 并且删除debug
分支 :debug
- 重新顯示隐藏的
,并且将其從stash
清單中删除 :stash list
- 然後就可以愉快地繼續做自己的事情啦!
感謝chucklu的提醒:上面第五步的兩條指令,可以用
git stash pop
指令代替。
3. 拓展閱讀
在實際生産過程中,難免會遇到多個 stash 的情況。此時,他們的 id 預設都是:
stash{0}
,
stash{1}
,
stash{2}
… …
當我們恢複一個 stash ,并且将它從 stash list 中移除的時候,在其下方的 stash 記錄的 id 會自動變小,以保證 id 是從 0 到 n 的連續自然數列。是以,當從 stash list 移除一個 stash 後,一些 stash 的 id 就會發生改變。此處是個坑。