事情的起因
在寫一個項目的時候伯顶,因為是多人開發(fā)囚灼,需要用到git。但總有不想push的時候祭衩≡钐澹可是又想看一下隊友的代碼,腫么辦掐暮?蝎抽?
這時候,今天的主角登場了——
git stash
剛知道的這個命令的時候路克,那叫一個爽呀樟结。不用push,就可以pull別人的代碼精算,在本地合并(當然瓢宦,大家不要學我,還是要多多push比較好)
但是幸福的日子總是短暫的灰羽。很快驮履,我就玩脫了……
一個平靜的上午,我git stash
然后git pull
在本地合并了之后我輸入了git stash pop
……
我感覺我的代碼并沒有發(fā)生變化
是不是剛剛那行代碼沒起作用廉嚼?
于是玫镐,我又在terminal里輸入git stash pop
……
不!G岸臁摘悴!
……
一朝回到解放前
其實這時候只要再來一句git stash pop stash@{0}
問題就可以解決了
可是……我那時不知道啊=⒒妗!葱椭!
當你突然發(fā)現(xiàn)你幸幸苦苦肝了很久的代碼捂寿,煙消云散,相信我孵运,你會抓狂的:)
從那以后秦陋,我再也不敢肆無忌憚的擺弄我項目的git了
并且我開始
洗心革面 學習git stash
定義
首先,我們來看看官方文檔對 git-stash 的定義吧
git-stash - Stash the changes in a dirty working directory away
Use git stash when you want to record the current state of the working directory and the index, but want to go back to a clean working directory. The command saves your local modifications away and reverts the working directory to match the HEAD commit.
蛤治笨?說人話
stash 在漢語中的意思就是 存儲驳概、貯藏 赤嚼。
如果你想保留存儲工作目錄和索引當前狀態(tài)的記錄,但是你又想回到之前干凈的工作目錄繼續(xù)工作顺又,就用它啦更卒。它會保存你本地的更改并且使工作目錄恢復為HEAD指針所指的提交。
可以再人話一點嗎稚照?
這個定義就是說蹂空,git-stash 這一大類命令是在你現(xiàn)在寫的代碼還及其惡心,不能見人(push)的時候果录,用來將代碼的改動存儲起來上枕,以免連累那些好代碼不能及時有一個好歸宿(被push)
當然,你也可以將已經(jīng)比較穩(wěn)定的版本先保存起來弱恒,如果不小心改爛了代碼辨萍,也可以回頭。只是既然這樣不如git push
返弹。
使用方法
git stash
存儲當前工作目錄
$ git stash
Saved working directory and index state WIP on Practice: 2f70846 Complete practice
view and network
git stash list
查看之前存儲的所有版本列表
$ git stash list
stash@{0}: WIP on Practice: 2f70846 Complete practice view and network
stash@{1}: WIP on Practice: 2f70846 Complete practice view and network
stash@{2}: WIP on Practice: 2f70846 Complete practice view and network
stash@{3}: WIP on Practice: 2f70846 Complete practice view and network
stash@{4}: WIP on Practice: 812e77b Add collectionView and AnswerView
stash@{5}: WIP on Practice: 53bb0c1 add tableView of questions and refactor the code of scrollView
git stash pop [stash_id]
恢復具體某一次的版本,如果不指定stash_id分瘦,則默認h恢復最新的存儲進度
$ git stash pop stash@{0}
Auto-merging WePeiYang/Shared/Network/SolaSessionManager.swift
CONFLICT (content): Merge conflict in WePeiYang/Shared/Network/SolaSessionManager.swift
Auto-merging WePeiYang/Practice/Practice/QuestionTableView/OptionsCell.swift
CONFLICT (content): Merge conflict in WePeiYang/Practice/Practice/QuestionTableView/OptionsCell.swift
Auto-merging WePeiYang/Practice/Practice/Exercise/Model/ExerciseNetwork.swift
Auto-merging WePeiYang.xcodeproj/project.pbxproj
CONFLICT (content): Merge conflict in WePeiYang.xcodeproj/project.pbxproj
恢復之后,有時打開工程文件琉苇,會發(fā)現(xiàn)里面所有文件都不翼而飛了嘲玫?!
莫慌并扇,莫慌
這是因為出現(xiàn)合并沖突的問題而導致工程文件打不開去团。
這時候右擊工程文件,單擊“顯示包內容”穷蛹,打開“project.pbxproj”文件土陪,然后command + f 搜索 “stashed”。把沖突部分刪掉就可以重新打開啦
git stash drop [stash_id]
刪除一個存儲的進度肴熏。如果不指定stash_id鬼雀,則默認刪除最新的存儲進度。
$ git stash drop stash@{5}
Dropped stash@{5} (00a18888b0d4c7e9c7d543e9798e7de8df967bc3)
git stash clear
慎用M芾簟源哩!
清除所有的存儲進度
暫寫到這~以后有時間再更