青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-145  評(píng)論-173  文章-70  trackbacks-0
最近在使用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ì)解釋?zhuān)m用場(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)。這樣的話(huà)往往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'命令后,你的棧里將充滿(mǎn)了未提交的代碼,這時(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)有完成。但是,不提交的話(huà),又沒(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ǔ)上開(kāi)發(fā)的。想加入一個(gè)新的特性,所以就開(kāi)了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ò)!)

恢復(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ò),才能保證很高的工作效率。
最后一句:Git是神器,就要看你如何駕馭它了。
posted on 2011-11-13 00:36 deercoder 閱讀(300825) 評(píng)論(21)  編輯 收藏 引用 所屬分類(lèi): Git

評(píng)論:
# re: Git Stash用法 2011-11-13 07:44 | tjhaven
千萬(wàn)別用Stash。stash多了,你自己都記不得了。為什么不用branch?以后可以cherry-pick以前的commit。

git我用了3年了,聽(tīng)我的沒(méi)錯(cuò)。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 09:28 | 劉暢
@tjhaven
額,謝謝~我是開(kāi)的一個(gè)新的branch,但是新特性沒(méi)有完成的話(huà)不想提交,這個(gè)時(shí)候再開(kāi)一個(gè)分支沒(méi)什么意義吧?難道你的意思是要提交一下?  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 10:10 | kkpattern
神per,如果stash中的修改的文件和修復(fù)Bug是所修改的文件有交集,會(huì)怎么樣?
比如我在新branch中修改了a.java;b.java
然后我將新branch stash,修復(fù)Bug,修復(fù)過(guò)程中修改了a.java;c.java
然后stash pop的過(guò)程中a.java會(huì)怎么修改?相當(dāng)于merge嗎?如果修改的內(nèi)容有沖突呢?  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 16:29 | 劉暢
@kkpattern
pop出來(lái)的內(nèi)容只是你上次stash時(shí)候的內(nèi)容,那個(gè)時(shí)候你還沒(méi)有修復(fù)這個(gè)Bug。所以a.java的內(nèi)容不會(huì)包含你修復(fù)那個(gè)Bug的內(nèi)容,此時(shí)要用cherry-pick來(lái)通過(guò)增量的方法將修復(fù)的內(nèi)容合并到新版本上,如果有沖突需要手動(dòng)解決。
一般的,我認(rèn)為應(yīng)該是兩個(gè)版本,或者是不相干的分支內(nèi)容上工作。Stash的作用應(yīng)該只是減少不必要提交的作用。有交集的情況確實(shí)有些麻煩。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 19:39 | 陳梓瀚(vczh)
切換分支?多enlist幾個(gè)就好了,這是最簡(jiǎn)單的解決方法。反正硬盤(pán)那么大。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 19:46 | 陳梓瀚(vczh)
@陳梓瀚(vczh)
一般來(lái)說(shuō)我自己的代碼,在硬盤(pán)上都用同一個(gè)branch下載了兩份,當(dāng)我在某一份上面工作的時(shí)候,反正VisualStudio會(huì)自己找到正確的client,然后更新到最新,開(kāi)始干活。然后你只要記得哪一份對(duì)應(yīng)哪一個(gè)任務(wù)就行了(win7有便箋,寫(xiě)屏幕上即可)。git這個(gè)功能反而是很容易讓人類(lèi)犯錯(cuò),不太好。

這樣我的硬盤(pán)就有N個(gè)文件夾都對(duì)應(yīng)同一個(gè)branch,分別修改,分別commit,獨(dú)立sync latest。多方便。為什么一定要一個(gè)文件夾對(duì)應(yīng)一個(gè)branch呢?完全沒(méi)道理的。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 19:58 | 劉暢
@陳梓瀚(vczh)
這種做法有違版本管理的初衷,很容易造成混亂。如果都選擇多個(gè)備份的話(huà),那和直接進(jìn)行復(fù)制,粘貼,打上Tag信息有何區(qū)別?我認(rèn)為SVN,Git等版本管理工具的出現(xiàn),就是為了避免你這種做法。對(duì)于大型工程,這種方式我覺(jué)得很不可取。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 21:05 | 陳梓瀚(vczh)
@劉暢
多個(gè)備份并不妨礙你進(jìn)行版本管理啊,你把自己當(dāng)成兩個(gè)人不就是了——兩個(gè)人開(kāi)發(fā)總不能一起用同一份物理文件進(jìn)行開(kāi)發(fā)的吧。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 21:06 | 陳梓瀚(vczh)
@劉暢
有些時(shí)候大型工程才這樣的,之前工程有1000個(gè)人,平均同時(shí)有5000個(gè)任務(wù)在進(jìn)行,用版本管理工具。你認(rèn)為如何可以避免同時(shí)創(chuàng)建多個(gè)client……  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2011-11-13 21:11 | 劉暢
@陳梓瀚(vczh)
嗯,不過(guò)我還是覺(jué)得本機(jī)開(kāi)發(fā)的話(huà),如果有必要盡量減少備份個(gè)數(shù)。而且使用Stash也不會(huì)有多麻煩,其實(shí)不就是相當(dāng)于把你的那個(gè)內(nèi)容復(fù)制一份。所以我還是任務(wù)使用這個(gè)會(huì)比較好一點(diǎn)。只是用一個(gè)Tag來(lái)記錄你拷貝的位置而已。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法[未登錄](méi) 2011-12-26 09:53 | Loaden
stash是一個(gè)很有用的命令!
不會(huì)用stash,說(shuō)明不會(huì)用git!  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2013-12-04 16:34 | marco
@劉暢
pop出來(lái)的內(nèi)容只是你上次stash時(shí)候的內(nèi)容,那個(gè)時(shí)候你還沒(méi)有修復(fù)這個(gè)Bug。所以a.java的內(nèi)容不會(huì)包含你修復(fù)那個(gè)Bug的內(nèi)容,此時(shí)要用cherry-pick來(lái)通過(guò)增量的方法將修復(fù)的內(nèi)容合并到新版本上,如果有沖突需要手動(dòng)解決。

會(huì)包含.如果沖突了.會(huì)提示一個(gè)merge.需要手動(dòng)解決...  回復(fù)  更多評(píng)論
  
# re: Git Stash用法[未登錄](méi) 2014-02-08 10:59 | k
@tjhaven
好意思說(shuō)自己用了三年git.毫無(wú)長(zhǎng)進(jìn)吧  回復(fù)  更多評(píng)論
  
# re: Git Stash用法[未登錄](méi) 2014-03-12 14:33 | snowball
針對(duì)你的example提個(gè)問(wèn)題
如果僅僅是在develop上進(jìn)行bug fix,那么在newdevelop上進(jìn)行g(shù)it stash的意義又何在呢?  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2014-04-02 09:47 | conquer
非常好用,并且樓主說(shuō)的很清楚,為什么有那么多人不理解呢……  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2014-07-24 14:37 | 果殼
@snowball
你不commit或者stash能切換分支?  回復(fù)  更多評(píng)論
  
# re: Git Stash用法[未登錄](méi) 2014-08-09 02:50 | Leon
請(qǐng)問(wèn)下樓主,在Develop上的bug fix,如何體現(xiàn)在new develop上呢?
如果是簡(jiǎn)單的還好,如果復(fù)雜的話(huà),總不能在new develop上重做一遍吧...  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2014-08-20 15:27 | mini
# re: Git Stash用法 2014-08-23 09:42 | caostorm
@marco
stash的話(huà)一定是基于某個(gè)版本的,而且將stash從棧內(nèi)拿出來(lái),一定是需要還原到對(duì)應(yīng)的版本。通過(guò)git stash list可以清晰的看到每個(gè)stash對(duì)應(yīng)的版本,如:
stash@{0}: WIP on master: e95dc37 Require administrator authority...
stash@{1}: WIP on md_develop: fcaa18f Add an object to recieve md...
比如你需要恢復(fù)stash@{1}這時(shí)候你需要做的是:
git checkout fcaa18f
git stash apply stash@{1}
盡量不使用類(lèi)似git stash pop的方法。如果你當(dāng)前fcaa18f所在的分支有繼續(xù)往前推進(jìn)的話(huà),建議在fcaa18f上建立新的分支,然后繼續(xù)stash@{1}的修改,并將stash@{1}的內(nèi)容提交到新的分支上:
git branch new_develop
git checkout new_develop
git add FILES
git commit
后續(xù)再通過(guò)cherry-pick的方式,將修改的內(nèi)容應(yīng)用到其他需要這個(gè)修改的分支之上。  回復(fù)  更多評(píng)論
  
# re: Git Stash用法 2016-08-15 15:56 | doubi
@Loaden
這個(gè)B裝的好  回復(fù)  更多評(píng)論
  
# re: Git Stash用法[未登錄](méi) 2016-08-22 17:25 | q
@陳梓瀚(vczh)
人稱(chēng)輪帶逛!!!  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久精| 一本久久精品一区二区| 欧美freesex8一10精品| 久久久亚洲国产美女国产盗摄| 性欧美超级视频| 久久激情视频免费观看| 麻豆av一区二区三区久久| 欧美黄免费看| 国产精品成人一区二区三区夜夜夜| 国产精品久久久久久久久免费桃花| 国产精品视频福利| 精品白丝av| 一区在线免费| 99精品久久久| 性视频1819p久久| 老色批av在线精品| 日韩亚洲精品在线| 久久精品1区| 欧美区高清在线| 国产一区导航| 亚洲午夜成aⅴ人片| 久久尤物视频| 日韩视频久久| 久久精品二区| 国产精品久久九九| 亚洲精品视频免费观看| 久久精品99国产精品日本| 欧美激情一区二区三区四区| 亚洲一区免费| 欧美精品尤物在线| 樱花yy私人影院亚洲| 亚洲影视在线| 最新中文字幕一区二区三区| 亚洲免费在线播放| 欧美日韩国产麻豆| **欧美日韩vr在线| 久久嫩草精品久久久久| 亚洲一二三四区| 免费不卡亚洲欧美| 激情欧美一区二区三区| 午夜精品一区二区三区电影天堂 | 欧美精品久久一区| 激情文学一区| 久久精品一二三区| 亚洲影视综合| 国产精品免费观看在线| 一区二区日韩精品| 亚洲精品综合在线| 欧美国产精品va在线观看| 亚洲第一综合天堂另类专| 久久九九热re6这里有精品| 亚洲欧美大片| 国产精品视频99| 性欧美8khd高清极品| 一本色道久久综合亚洲精品按摩 | 免费成年人欧美视频| 国产在线乱码一区二区三区| 欧美一区二区成人| 亚洲综合精品自拍| 国产日韩精品入口| 久久精品国产亚洲5555| 亚洲免费在线播放| 国产精品久久久久久影视| 欧美激情第三页| 欧美亚洲不卡| 亚洲一区国产视频| 一区二区国产在线观看| 国产精品不卡在线| 午夜日韩电影| 欧美在线观看一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 久久米奇亚洲| 久久综合久久美利坚合众国| 亚洲国产电影| 亚洲人成网站色ww在线| 欧美日韩国产不卡| 欧美一级日韩一级| 久久人人97超碰国产公开结果 | 亚洲欧美日韩精品久久| 国产精品一区二区三区四区| 久久日韩粉嫩一区二区三区| 久久一区亚洲| 一区二区三区www| 午夜视频在线观看一区| 亚洲国产精品一区制服丝袜| 亚洲精品一区二区三区99| 国产精品视频在线观看| 每日更新成人在线视频| 欧美精品在线免费播放| 久久9热精品视频| 另类欧美日韩国产在线| 亚洲香蕉成视频在线观看| 欧美一区二区性| 亚洲美女性视频| 欧美一区二区视频在线| 日韩视频精品| 久久精品理论片| 亚洲欧美日韩精品久久| 麻豆精品传媒视频| 亚洲欧美日韩综合aⅴ视频| 久久亚洲国产精品日日av夜夜| 99精品国产热久久91蜜凸| 欧美一区二区三区免费大片| 99亚洲一区二区| 久久亚洲电影| 久久精品亚洲国产奇米99| 欧美日韩国产小视频| 老司机aⅴ在线精品导航| 国产精品久久久久高潮| 亚洲欧洲免费视频| 1769国产精品| 欧美一区二区三区四区夜夜大片| 日韩亚洲综合在线| 久久一二三四| 久久这里只有| 国产一区导航| 午夜久久久久久| 亚洲欧美中文在线视频| 欧美日韩第一区| 亚洲欧洲一区二区三区| 亚洲大片一区二区三区| 午夜在线不卡| 欧美与欧洲交xxxx免费观看| 欧美午夜无遮挡| 999在线观看精品免费不卡网站| 午夜精品福利视频| 欧美—级a级欧美特级ar全黄| 久久爱www.| 国产日韩精品入口| 午夜在线一区| 久久九九久久九九| 国产视频丨精品|在线观看| 亚洲一区视频在线| 午夜精品在线看| 国产精品成人av性教育| 亚洲免费精品| 亚洲专区在线视频| 国产精品国产精品国产专区不蜜| 日韩一级在线观看| 亚洲欧美日韩国产综合在线| 国产精品视频网站| 欧美与欧洲交xxxx免费观看| 久久久久www| 亚洲激情在线视频| 欧美老女人xx| 亚洲一区二区在线观看视频| 午夜一区二区三区不卡视频| 国产精品视频免费观看| 欧美一区二区| 欧美粗暴jizz性欧美20| 亚洲精品美女在线观看| 欧美区一区二| 亚洲专区一二三| 久久久国产一区二区三区| 一区二区三区在线免费播放| 欧美成人免费在线视频| 99视频超级精品| 久久久久久久久久久久久9999| 在线看视频不卡| 欧美人妖在线观看| 亚洲宅男天堂在线观看无病毒| 久久精品国产亚洲高清剧情介绍| 国产综合色精品一区二区三区| 久久激情五月激情| 亚洲人成网站精品片在线观看 | 欧美夫妇交换俱乐部在线观看| 亚洲激情校园春色| 午夜免费日韩视频| 亚洲国产精品福利| 欧美午夜精品久久久久久浪潮| 亚洲一区亚洲| 亚洲国产欧美久久| 久久国产欧美精品| 夜夜嗨av一区二区三区四区| 国产一二精品视频| 欧美日韩情趣电影| 久久久999精品| 亚洲午夜电影| 亚洲高清不卡一区| 亚洲欧美在线播放| 欧美高清日韩| 一区二区自拍| 久久精品盗摄| 亚洲清纯自拍| 欧美人与禽猛交乱配视频| 亚洲一区二区三区在线播放| 美日韩精品视频| 亚洲一区国产精品| 亚洲第一视频| 国产乱码精品一区二区三区五月婷 | 欧美在线|欧美| 亚洲精选久久| 国产一区二区三区自拍| 欧美日韩无遮挡| 久久综合九色| 亚洲一区在线免费观看| 欧美成人一品| 精品999久久久| 国产美女精品免费电影| 欧美日本久久|