背景
相信很多人對git的使用還只停留在:git add、git commit、git pull、git push這些基本的git操作;當遇到一些稍微複雜一些處理的時候顯得方法不多,工具沒有的情況,在這裡我說一說git-stash這個命令以及為什麼應該經常使用,希望能夠對你有啟發。
釋義
隱藏/儲存 發生變化的‘髒’的工作區
解析
使用git我們一定清楚git的三個程式碼存放環境:工作區、版本庫、遠端倉庫;簡單描述就是我們修改的程式碼在工作區中,通過git-add和git-commit提交到版本庫,納入版本(git)管理,再通過git-push明天推送到遠端倉庫,和小夥伴們共享我們的勞動成果。在沒有執行相應的命令之前,版本庫和遠端倉庫保持原有的程式碼,我們的變更只是在我們本地的機器上,而版本庫和遠端倉庫沒有任何影響。
其實git還有一個倉儲區:一個堆疊式的儲存區;以方便我們任何時候將我們的‘髒’的工作區變成一個‘乾淨’的工作區;我們辛苦的勞動成果此時就不見了,但是別擔心,git已經把修改的程式碼儲存到了一個暫存區中,並沒有丟失。
命令
git stash 儲存工作區的變更
git stash list 列出暫存區中已經儲存的變更
git stash apply 應用某個暫存的變更到工作區,也就是取出指定的某一次暫存內容應用到當前工作區
git stash pop 應用某個暫存的變更到工作區,並從堆疊中將這次暫存記錄移走
git stash drop 刪除指定的某個暫存記錄
git stash clear 清空所有的暫存記錄
複製程式碼
情境
為什麼要先用git-stash?再拉去程式碼?再提交程式碼?
也許是客戶那邊的程式碼管理開發想要讓對git還不是很熟悉的小夥伴們儘可能的減少提交程式碼時出現問題!但是我仔細想了想也測試一下,發現其實這樣並沒有什麼作用!該衝突的還是會在git stash pop時衝突需要解決,也並不能保證線性提交(fast-forward)。
我能想到的好處
可能程式碼管理者是為了讓每個開發人員在需要同步程式碼時,不在必須提交自己還在工作中的那些工作區程式碼!因為當git pull拉去遠端程式碼時,如果遠端倉庫中的某次提交修改的某個檔案也正是你正在改動的檔案,git會要求你先提交,再拉取;所以如果你暫時還不想提交,就可以使用git-stash。所以這麼做其實是為了你能實時同步遠端倉庫程式碼而不必每次同步都必須把自己未完成的程式碼也提交到版本庫。
正確的順序應該是這樣:
可隨時執行,用於同步遠端倉庫程式碼:
git stash clear
git stash
git pull
git stash pop
複製程式碼
提交程式碼時執行:
git stash clear
git stash
git pull
git stash pop
git add .
git commit -m 'xx'
git push
複製程式碼