Git Stash用法

Git Stash用法

最近在使用Git管理項(xiàng)目工程的時(shí)候,遇到了很多問(wèn)題碎连,也學(xué)習(xí)到了很多關(guān)于Git常見(jiàn)使用的技巧锦溪,下面就其中關(guān)于Git Stash的用法和大家分享下。

首先卫枝,簡(jiǎn)單介紹下Git Stash命令的用法,詳細(xì)的用法在man文檔中有相關(guān)介紹讹挎,下面我來(lái)說(shuō)明常見(jiàn)的使用校赤。

git stash: 備份當(dāng)前的工作區(qū)的內(nèi)容,從最近的一次提交中讀取相關(guān)內(nèi)容筒溃,讓工作區(qū)保證和上次提交的內(nèi)容一致马篮。同時(shí),將當(dāng)前的工作區(qū)內(nèi)容保存到Git棧中怜奖。

git stash pop: 從Git棧中讀取最近一次保存的內(nèi)容浑测,恢復(fù)工作區(qū)的相關(guān)內(nèi)容。由于可能存在多個(gè)Stash的內(nèi)容烦周,所以用棧來(lái)管理,pop會(huì)從最近的一個(gè)stash中讀取內(nèi)容并恢復(fù)怎顾。

git stash list: 顯示Git棧內(nèi)的所有備份读慎,可以利用這個(gè)列表來(lái)決定從那個(gè)地方恢復(fù)。

git stash clear: 清空Git棧槐雾。此時(shí)使用gitg等圖形化工具會(huì)發(fā)現(xiàn)夭委,原來(lái)stash的哪些節(jié)點(diǎn)都消失了。

關(guān)于Git Stash的詳細(xì)解釋募强,適用場(chǎng)合株灸,這里做一個(gè)說(shuō)明:

使用git的時(shí)候,我們往往使用branch解決任務(wù)切換問(wèn)題擎值,例如慌烧,我們往往會(huì)建一個(gè)自己的分支去修改和調(diào)試代碼,?如果別人或者自己發(fā)現(xiàn)原有的分支上有個(gè)不得不修改的bug,我們往往會(huì)把完成一半的代碼?commit提交到本地倉(cāng)庫(kù)鸠儿,然后切換分支去修改bug屹蚊,改好之后再切換回來(lái)厕氨。這樣的話往往log上會(huì)有大量不必要的記錄。其實(shí)如果我們不想提交完成一半或者不完善的代碼汹粤,但是卻不得不去修改一個(gè)緊急Bug命斧,那么使用'git?stash'就可以將你當(dāng)前未提交到本地(和服務(wù)器)的代碼推入到Git的棧中,這時(shí)候你的工作區(qū)間和上一次提交的內(nèi)容是完全一樣的嘱兼,所以你可以放心的修?Bug国葬,等到修完Bug,提交到服務(wù)器上后芹壕,再使用'git?stash?apply'將以前一半的工作應(yīng)用回來(lái)汇四。也許有的人會(huì)說(shuō),那我可不可以多次將未提交的代碼壓入到棧中哪雕?答案是可以的船殉。當(dāng)你多次使用'git?stash'命令后,你的棧里將充滿了未提交的代碼斯嚎,這時(shí)候你會(huì)對(duì)將哪個(gè)版本應(yīng)用回來(lái)有些困惑利虫,'git?stash?list'命令可以將當(dāng)前的Git棧信息打印出來(lái),你只需要將找到對(duì)應(yīng)的版本號(hào)堡僻,例如使用'git?stash?apply?stash@{1}'就可以將你指定版本號(hào)為stash@{1}的工作取出來(lái)糠惫,當(dāng)你將所有的棧都應(yīng)用回來(lái)的時(shí)候,可以使用'git?stash?clear'來(lái)將棧清空钉疫。

在這里順便提下git?format-patch-n?,?n是具體某個(gè)數(shù)字硼讽,?例如'git?format-patch?-1'這時(shí)便會(huì)根據(jù)log生成一個(gè)對(duì)應(yīng)的補(bǔ)丁,如果'git?format-patch?-2'那么便會(huì)生成2個(gè)補(bǔ)丁牲阁,當(dāng)然前提是你的log上有至少有兩個(gè)記錄固阁。

看過(guò)上面的信息,就可以知道使用場(chǎng)合了:當(dāng)前工作區(qū)內(nèi)容已被修改城菊,但是并未完成备燃。這時(shí)Boss來(lái)了,說(shuō)前面的分支上面有一個(gè)Bug凌唬,需要立即修復(fù)并齐。可是我又不想提交目前的修改客税,因?yàn)樾薷臎](méi)有完成况褪。但是,不提交的話更耻,又沒(méi)有辦法checkout到前面的分支测垛。此時(shí)用Git Stash就相當(dāng)于備份工作區(qū)了。然后在Checkout過(guò)去修改秧均,就能夠達(dá)到保存當(dāng)前工作區(qū)赐纱,并及時(shí)恢復(fù)的作用脊奋。

下面,將我使用過(guò)程中遇到的一個(gè)問(wèn)題和大家分享:

首先疙描,在Git Stash之后诚隙,提交圖如下所示:

從圖中可以看到,develop和newdevelop是在同一個(gè)分支上起胰,因?yàn)榉种ewdevelop是在develop分支的基礎(chǔ)上開發(fā)的久又。想加入一個(gè)新的特性,所以就開了newdevelop分支效五,然后就在上面加?xùn)|西地消,加特性,該代碼畏妖。這個(gè)時(shí)候工作的內(nèi)容已經(jīng)變化了脉执,但是develop和newdevelop都是指向同一個(gè)提交的,因?yàn)閚ewdevelop上面還木有提交戒劫。

這個(gè)時(shí)候半夷,Boss來(lái)了,說(shuō)develop上面有個(gè)Bug迅细,趕快改一下巫橄,手頭的工作先放放,穩(wěn)定版本不能有缺陷茵典。沒(méi)辦法湘换,當(dāng)前正在newdevelop上搞的high呢,就Git Stash一下统阿。所以會(huì)看到上面有兩個(gè)節(jié)點(diǎn)彩倚,紅色以及上面一個(gè)。就是stash之后的結(jié)果扶平,注意是在newdevelop上面進(jìn)行的stash帆离。

正如前面所說(shuō),stash會(huì)暫存當(dāng)前的工作區(qū)內(nèi)容蜻直,然后將工作區(qū)內(nèi)容保持和上次提交相同盯质,此時(shí)內(nèi)容都是上面8a32那個(gè)提交的內(nèi)容袁串。從終端中查看相應(yīng)的信息內(nèi)容概而,如下:

印證了簽名的說(shuō)法,newdevelop是有修改囱修,modified赎瑰,然后stash之后,工作區(qū)是最近一次提交破镰,此時(shí)newdevelop和develop都是相同的餐曼,所以再git status查看發(fā)現(xiàn)压储,都一樣,nothing to commit.

然后Stash完成之后源譬,就要Fix Bug了集惋。為此,回到develop分支上進(jìn)行修復(fù)踩娘,然后提交刮刑,完成后的提交圖如下所示:

從途中可以看到,newdevelop還是在下面养渴,因?yàn)橹赶虻氖抢系哪莻€(gè)8a32的commit雷绢。新的develop由于修復(fù)了Bug,所以產(chǎn)生一個(gè)新提交理卑。

然后在develop上面修復(fù)了Bug之后翘紊,在回到newdevelop上面進(jìn)行一個(gè)新的特性的繼續(xù)編碼,此時(shí)checkout回去的時(shí)候藐唠,沒(méi)有神馬內(nèi)容可以提交帆疟,因?yàn)槎即嬖赟tash中了,沒(méi)有任何修改中捆。如上圖鸯匹。

那么,恢復(fù)工作區(qū)內(nèi)容吧泄伪。于是git stash pop(注意這里由于只Stash了一次所以使用pop殴蓬,具體你存放了多少,要恢復(fù)哪一個(gè)要自己清楚蟋滴,否則會(huì)出錯(cuò)H咎)

恢復(fù)之后,從上圖中可以看到津函,此時(shí)再git status就會(huì)發(fā)現(xiàn)文件有修改肖粮,說(shuō)明恢復(fù)過(guò)來(lái)了。然后就繼續(xù)編碼尔苦,提交一個(gè)穩(wěn)定的新特性版本涩馆,如下圖,產(chǎn)生的新提交為0906.

然后再查看提交圖允坚,會(huì)發(fā)現(xiàn)魂那,stash pop之后,對(duì)應(yīng)的存放的stash被清空掉了稠项,提交圖中涯雅,newdevelop上面對(duì)應(yīng)一個(gè)新的提交。并且在develop上面展运。分支的develop那個(gè)紅色活逆,即為前面修復(fù)Bug的那個(gè)提交精刷。

總結(jié)起來(lái):

操作很簡(jiǎn)單,但是頭腦要清楚蔗候。要在哪個(gè)分支上修復(fù)Bug怒允,要暫存哪個(gè)地方的內(nèi)容,之后修復(fù)完了在那個(gè)地方提交锈遥,然后要到哪個(gè)分支上面恢復(fù)工作區(qū)误算,都是需要注意的,否則迷殿,很容易造成提交圖混亂儿礼。只有弄清楚了工作流程,才不容易出錯(cuò)庆寺,才能保證很高的工作效率蚊夫。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市懦尝,隨后出現(xiàn)的幾起案子知纷,更是在濱河造成了極大的恐慌,老刑警劉巖陵霉,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琅轧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踊挠,警方通過(guò)查閱死者的電腦和手機(jī)乍桂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)效床,“玉大人睹酌,你說(shuō)我怎么就攤上這事∈L矗” “怎么了憋沿?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)沪猴。 經(jīng)常有香客問(wèn)我辐啄,道長(zhǎng),這世上最難降的妖魔是什么运嗜? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任壶辜,我火速辦了婚禮,結(jié)果婚禮上洗出,老公的妹妹穿的比我還像新娘士复。我一直安慰自己图谷,他們只是感情好翩活,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布阱洪。 她就那樣靜靜地躺著,像睡著了一般菠镇。 火紅的嫁衣襯著肌膚如雪冗荸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天利耍,我揣著相機(jī)與錄音蚌本,去河邊找鬼。 笑死隘梨,一個(gè)胖子當(dāng)著我的面吹牛程癌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轴猎,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼嵌莉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捻脖?” 一聲冷哼從身側(cè)響起锐峭,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎可婶,沒(méi)想到半個(gè)月后沿癞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矛渴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年椎扬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具温。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盗舰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桂躏,到底是詐尸還是另有隱情钻趋,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布剂习,位于F島的核電站蛮位,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳞绕。R本人自食惡果不足惜失仁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望们何。 院中可真熱鬧萄焦,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至冒签,卻和暖如春在抛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萧恕。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工刚梭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人票唆。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓朴读,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親走趋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磨德,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,682評(píng)論 1 17
  • 他從小母親早逝吆视,10歲的時(shí)候父親和一個(gè)離婚的女人重組了家庭典挑。 重新?lián)碛心赣H的他并沒(méi)有感受到那份缺失已久的母愛(ài)。繼母...
    浮云歸晚閱讀 370評(píng)論 0 0
  • 根據(jù)葉非夜作品《國(guó)民老公帶回家》改編的網(wǎng)臺(tái)聯(lián)動(dòng)青春虐心偶像巨制《國(guó)民老公》在上個(gè)月8日正式開機(jī)了啦吧。 葉非夜是閱文集...
    張大大的小嘴巴閱讀 1,120評(píng)論 0 4
  • 在各大媒體紛紛報(bào)道臺(tái)風(fēng)要來(lái)啦授滓,快回家躲起來(lái)啊這樣的氛圍下琳水,拆書幫的小伙伴們依然熱情不減,在臺(tái)風(fēng)來(lái)臨的前一天舉辦了一...
    妮妮藍(lán)閱讀 590評(píng)論 1 3
  • David Foster Wallace如果還活著該多好般堆。電影里的一個(gè)片段在孝,男主有喉癌,會(huì)一邊抽煙一邊漱口淮摔。所有生...
    吸煙至死閱讀 172評(píng)論 0 0