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

隨筆-145  評論-173  文章-70  trackbacks-0
最近在使用Git管理項目工程的時候,遇到了很多問題,也學習到了很多關于Git常見使用的技巧,下面就其中關于Git Stash的用法和大家分享下。
首先,簡單介紹下Git Stash命令的用法,詳細的用法在man文檔中有相關介紹,下面我來說明常見的使用。
git stash: 備份當前的工作區的內容,從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。同時,將當前的工作區內容保存到Git棧中。
git stash pop: 從Git棧中讀取最近一次保存的內容,恢復工作區的相關內容。由于可能存在多個Stash的內容,所以用棧來管理,pop會從最近的一個stash中讀取內容并恢復。
git stash list: 顯示Git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。
git stash clear: 清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。
關于Git Stash的詳細解釋,適用場合,這里做一個說明:
使用git的時候,我們往往使用branch解決任務切換問題,例如,我們往往會建一個自己的分支去修改和調試代碼, 如果別人或者自己發現原有的分支上有個不得不修改的bug,我們往往會把完成一半的代碼 commit提交到本地倉庫,然后切換分支去修改bug,改好之后再切換回來。這樣的話往往log上會有大量不必要的記錄。其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急Bug,那么使用'git stash'就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修 Bug,等到修完Bug,提交到服務器上后,再使用'git stash apply'將以前一半的工作應用回來。也許有的人會說,那我可不可以多次將未提交的代碼壓入到棧中?答案是可以的。當你多次使用'git stash'命令后,你的棧里將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,'git stash list'命令可以將當前的Git棧信息打印出來,你只需要將找到對應的版本號,例如使用'git stash apply stash@{1}'就可以將你指定版本號為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用'git stash clear'來將棧清空。
在這里順便提下git format
-patch -n , n是具體某個數字, 例如 'git format-patch -1' 這時便會根據log生成一個對應的補丁,如果 'git format-patch -2' 那么便會生成2個補丁,當然前提是你的log上有至少有兩個記錄。

看過上面的信息,就可以知道使用場合了:當前工作區內容已被修改,但是并未完成。這時Boss來了,說前面的分支上面有一個Bug,需要立即修復。可是我又不想提交目前的修改,因為修改沒有完成。但是,不提交的話,又沒有辦法checkout到前面的分支。此時用Git Stash就相當于備份工作區了。然后在Checkout過去修改,就能夠達到保存當前工作區,并及時恢復的作用。

下面,將我使用過程中遇到的一個問題和大家分享:

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

從圖中可以看到,develop和newdevelop是在同一個分支上,因為分支newdevelop是在develop分支的基礎上開發的。想加入一個新的特性,所以就開了newdevelop分支,然后就在上面加東西,加特性,該代碼。這個時候工作的內容已經變化了,但是develop和newdevelop都是指向同一個提交的,因為newdevelop上面還木有提交。
這個時候,Boss來了,說develop上面有個Bug,趕快改一下,手頭的工作先放放,穩定版本不能有缺陷。沒辦法,當前正在newdevelop上搞的high呢,就Git Stash一下。所以會看到上面有兩個節點,紅色以及上面一個。就是stash之后的結果,注意是在newdevelop上面進行的stash。

正如前面所說,stash會暫存當前的工作區內容,然后將工作區內容保持和上次提交相同,此時內容都是上面8a32那個提交的內容。從終端中查看相應的信息內容,如下:

印證了簽名的說法,newdevelop是有修改,modified,然后stash之后,工作區是最近一次提交,此時newdevelop和develop都是相同的,所以再git status查看發現,都一樣,nothing to commit.

然后Stash完成之后,就要Fix Bug了。為此,回到develop分支上進行修復,然后提交,完成后的提交圖如下所示:
從途中可以看到,newdevelop還是在下面,因為指向的是老的那個8a32的commit。新的develop由于修復了Bug,所以產生一個新提交。


然后在develop上面修復了Bug之后,在回到newdevelop上面進行一個新的特性的繼續編碼,此時checkout回去的時候,沒有神馬內容可以提交,因為都存在Stash中了,沒有任何修改。如上圖。

那么,恢復工作區內容吧。于是git stash pop(注意這里由于只Stash了一次所以使用pop,具體你存放了多少,要恢復哪一個要自己清楚,否則會出錯!)

恢復之后,從上圖中可以看到,此時再git status就會發現文件有修改,說明恢復過來了。然后就繼續編碼,提交一個穩定的新特性版本,如下圖,產生的新提交為0906.
然后再查看提交圖,會發現,stash pop之后,對應的存放的stash被清空掉了,提交圖中,newdevelop上面對應一個新的提交。并且在develop上面。分支的develop那個紅色,即為前面修復Bug的那個提交。


總結起來:
操作很簡單,但是頭腦要清楚。要在哪個分支上修復Bug,要暫存哪個地方的內容,之后修復完了在那個地方提交,然后要到哪個分支上面恢復工作區,都是需要注意的,否則,很容易造成提交圖混亂。只有弄清楚了工作流程,才不容易出錯,才能保證很高的工作效率。
最后一句:Git是神器,就要看你如何駕馭它了。
posted on 2011-11-13 00:36 deercoder 閱讀(300805) 評論(21)  編輯 收藏 引用 所屬分類: Git

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

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

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

會包含.如果沖突了.會提示一個merge.需要手動解決...  回復  更多評論
  
# re: Git Stash用法[未登錄] 2014-02-08 10:59 | k
@tjhaven
好意思說自己用了三年git.毫無長進吧  回復  更多評論
  
# re: Git Stash用法[未登錄] 2014-03-12 14:33 | snowball
針對你的example提個問題
如果僅僅是在develop上進行bug fix,那么在newdevelop上進行git stash的意義又何在呢?  回復  更多評論
  
# re: Git Stash用法 2014-04-02 09:47 | conquer
非常好用,并且樓主說的很清楚,為什么有那么多人不理解呢……  回復  更多評論
  
# re: Git Stash用法 2014-07-24 14:37 | 果殼
@snowball
你不commit或者stash能切換分支?  回復  更多評論
  
# re: Git Stash用法[未登錄] 2014-08-09 02:50 | Leon
請問下樓主,在Develop上的bug fix,如何體現在new develop上呢?
如果是簡單的還好,如果復雜的話,總不能在new develop上重做一遍吧...  回復  更多評論
  
# re: Git Stash用法 2014-08-20 15:27 | mini
# re: Git Stash用法 2014-08-23 09:42 | caostorm
@marco
stash的話一定是基于某個版本的,而且將stash從棧內拿出來,一定是需要還原到對應的版本。通過git stash list可以清晰的看到每個stash對應的版本,如:
stash@{0}: WIP on master: e95dc37 Require administrator authority...
stash@{1}: WIP on md_develop: fcaa18f Add an object to recieve md...
比如你需要恢復stash@{1}這時候你需要做的是:
git checkout fcaa18f
git stash apply stash@{1}
盡量不使用類似git stash pop的方法。如果你當前fcaa18f所在的分支有繼續往前推進的話,建議在fcaa18f上建立新的分支,然后繼續stash@{1}的修改,并將stash@{1}的內容提交到新的分支上:
git branch new_develop
git checkout new_develop
git add FILES
git commit
后續再通過cherry-pick的方式,將修改的內容應用到其他需要這個修改的分支之上。  回復  更多評論
  
# re: Git Stash用法 2016-08-15 15:56 | doubi
@Loaden
這個B裝的好  回復  更多評論
  
# re: Git Stash用法[未登錄] 2016-08-22 17:25 | q
@陳梓瀚(vczh)
人稱輪帶逛!!!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            另类综合日韩欧美亚洲| 久久九九精品| 欧美精品一级| aa成人免费视频| 日韩视频在线一区二区| 欧美涩涩视频| 久久狠狠婷婷| 羞羞答答国产精品www一本| 国产综合久久| 亚洲国产精品小视频| 麻豆国产精品va在线观看不卡| 亚洲激情网站免费观看| 亚洲欧洲在线一区| 国产女人精品视频| 欧美成人高清| 欧美视频久久| 老鸭窝亚洲一区二区三区| 欧美成人精品一区二区三区| 亚洲制服丝袜在线| 久久国产乱子精品免费女| 亚洲理伦在线| 欧美一级久久久久久久大片| 亚洲精品国产视频| 亚洲专区在线视频| 影音先锋中文字幕一区二区| 亚洲免费久久| 狠狠色伊人亚洲综合成人| 亚洲欧洲一级| 又紧又大又爽精品一区二区| 老司机午夜免费精品视频| 欧美顶级少妇做爰| 国产精品久久久久高潮| 久久色在线观看| 国产精品99免费看 | 国产自产高清不卡| 亚洲美女av在线播放| 国产精品久久一区主播| 欧美在线观看视频在线| 欧美激情一级片一区二区| 久久电影一区| 欧美色精品在线视频| 亚洲国产精品福利| 一区二区亚洲| 亚洲一级黄色片| 一本色道久久综合亚洲精品高清| 欧美中文字幕视频在线观看| 亚洲女女做受ⅹxx高潮| 欧美精品福利视频| 欧美高清自拍一区| 国产一区深夜福利| 亚洲欧美日韩一区| 午夜欧美电影在线观看| 欧美日韩一区二区精品| 亚洲国产精品欧美一二99| 激情另类综合| 久久国产精品亚洲va麻豆| 久久不射电影网| 国产视频欧美| 在线日韩av片| 久久久www成人免费毛片麻豆| 亚洲欧美综合国产精品一区| 欧美绝品在线观看成人午夜影视| 欧美成人免费观看| 亚洲激情校园春色| 欧美69wwwcom| 91久久精品国产| 日韩视频在线播放| 欧美日韩国产精品一卡| 亚洲精品色图| 亚洲欧美另类国产| 欧美性猛交99久久久久99按摩 | 午夜精品区一区二区三| 国产精品日韩欧美一区二区| 亚洲一区二区在线看| 午夜在线视频一区二区区别| 国产精品大片免费观看| 亚洲一区999| 久久高清国产| 一区二区三区在线免费播放| 久久久久久**毛片大全| 亚洲大胆人体视频| 99v久久综合狠狠综合久久| 欧美日韩亚洲高清| 亚洲欧美国产va在线影院| 久久久久免费| 亚洲三级影院| 国产精品久久久久久av福利软件| 午夜精品亚洲| 亚洲在线视频| 久久免费精品视频| 亚洲精品中文字幕女同| 亚洲欧洲99久久| 在线成人激情黄色| 欧美久久成人| 亚洲一区制服诱惑| 欧美高清影院| 欧美在线影院在线视频| 亚洲国产日韩一级| 国产精品成人v| 久久九九全国免费精品观看| 亚洲欧洲一区二区在线观看| 欧美亚洲免费高清在线观看| 国产精品萝li| **网站欧美大片在线观看| 欧美69视频| 午夜精品久久久久久久99水蜜桃 | 国产精品午夜国产小视频| 久久人人爽国产| 亚洲免费网址| 亚洲国产精品一区二区www| 欧美一区二区在线视频| 日韩视频在线观看国产| 国产日韩亚洲欧美综合| 欧美精品一区二区三区久久久竹菊 | 国产免费一区二区三区香蕉精| 免费在线欧美黄色| 欧美一区二区在线视频| 亚洲精品你懂的| 久久成年人视频| 久久大逼视频| 亚洲一区二区三区涩| 91久久精品国产91久久性色tv| 久久久久成人精品| 亚洲影院在线观看| 一本色道精品久久一区二区三区 | 欧美色123| 欧美激情一区| 欧美freesex8一10精品| 午夜影视日本亚洲欧洲精品| 日韩视频在线观看一区二区| 亚洲国产精彩中文乱码av在线播放| 久久精品成人一区二区三区蜜臀| 亚洲视频精选| 中文在线资源观看网站视频免费不卡| 亚洲激情av在线| 影音先锋亚洲精品| 激情伊人五月天久久综合| 国产日韩一级二级三级| 国产欧美日韩中文字幕在线| 国产精品入口日韩视频大尺度| 欧美色区777第一页| 欧美视频在线观看 亚洲欧| 欧美日韩日日夜夜| 欧美日韩综合在线| 国产精品v日韩精品v欧美精品网站 | 乱码第一页成人| 久久久青草青青国产亚洲免观| 亚洲午夜激情网站| 一本色道久久88综合日韩精品| 在线亚洲免费| 亚洲一区在线播放| 亚洲欧美在线网| 久久精品观看| 麻豆久久精品| 欧美激情a∨在线视频播放| 亚洲电影一级黄| 亚洲国产日韩欧美| 欧美高清视频| 亚洲国产精品美女| 99国产麻豆精品| 亚洲午夜精品一区二区三区他趣| 亚洲欧美另类久久久精品2019| 欧美亚洲色图校园春色| 久久久久久午夜| 亚洲高清一区二| 一区二区三欧美| 欧美一二三区精品| 欧美国产一区视频在线观看| 欧美日韩久久不卡| 国产一区二区精品在线观看| 亚洲国产精品一区二区www| 在线一区二区三区四区五区| 欧美高潮视频| 久久久精品日韩| 亚洲动漫精品| 亚洲欧美中文在线视频| 久久综合网色—综合色88| 欧美日韩精品免费看| 国产婷婷精品| 日韩网站在线| 久久野战av| 夜夜夜久久久| 蜜臀va亚洲va欧美va天堂| 欧美亚洲第一页| 亚洲精品国产欧美| 久久男人资源视频| 在线亚洲+欧美+日本专区| 久久久久久国产精品mv| 国产精品激情电影| 91久久夜色精品国产网站| 欧美在线观看视频一区二区| 亚洲人成网站999久久久综合| 欧美主播一区二区三区| 欧美国产先锋| 亚洲大片一区二区三区| 亚洲一区综合| 99re66热这里只有精品4| 久久久久久久久久久久久9999| 国产精品男gay被猛男狂揉视频| 91久久精品日日躁夜夜躁欧美 |