天天看點

stash解惑與妙用

在實際項目開發中,總會遇到代碼寫到一半(沒法去打

commit

),去開啟新的分支 修複 Bug 或者 增加功能 的情況。如果不處理,未修改的代碼就會被帶入臨時建立的新的分支,沒寫完的代碼 和 要修複的代碼混合在一起,絕對苦逼。而 Git 中的

stash

就是用來對付這種情況。

1. 初識

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 如下:

為了達到目的,分為以下幾步:

  1. 隐藏修改:

    git stash

    :
  1. 建立新分支:

    git branch debug

    :
  1. debug

    分支上修複 bug, 并且将修改添加到 log 中 :
  1. 回到

    master

    分支, 合并

    debug

    分支的修改, 并且删除

    debug

    分支 :
  1. 重新顯示隐藏的

    stash

    ,并且将其從

    stash list

    清單中删除 :
  1. 然後就可以愉快地繼續做自己的事情啦!

感謝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 就會發生改變。此處是個坑。