最近git用的比較多,因為是實驗室多個人維護一個倉庫,經常會有合並沖突的情況,就學習了一下git stash的用法,目前有兩個場景非常常用:
1. 有人與我改動同一分支
我在本地修改好后,發現遠程分支已經被改動了,此時我本地也被改動了就造成了沖突,無法push或者pull。
此時可以使用git stash:
1 git stash //把本地的改動暫存起來 2 git pull //拉取遠端分支(此時本地分支會回滾到上次commit的情況,新的改動都存在了stash中) 3 git stash pop // 將棧頂改動重新加回本地分支,就可以繼續修改了,當然,如果改好了就是add,commit,push啥的。。
2. 不小心改動了其他分支,例如忘記切換,直接在master分支上做改動,這里假設我的分支是test分支
git stash //把本地當前改動暫存起來,此時master分支就恢復到了上次拉取時的狀態
git checkout test //切換到需要改動的分支
git stash pop //將改動pop到自己當前的分支
小結以及一些擴展:
顧名思義,stash就是一個棧,平時我們把需要暫存的文件存到棧中,把代碼恢復到上次拉取的狀態以進行操作,而git stash pop 就是讓棧頂元素出棧並刪除。
git stash apply 則是只取棧頂元素,但是不刪除。
這樣會有一個顯而易見后果,如果我再次執行git stash,新的改動將會出現在棧頂,棧中元素會越來越多,此時可以使用 git stash list 命令查看棧中元素,此時每個棧中元素會有自己對應的編號
使用git stash apply stash@{0} (0可以換成對應編號),來添加不同改動。同樣,你也可以 git stash drop stash@{0} 來刪除對應改動。
git stash clear 可以清空 stash list
就我個人而言,git stash pop就已經滿足日常需要了,所以我的stash list里日常只有編號0 和空
