目錄
問(wèn)題現(xiàn)象:
問(wèn)題分析:
拓展:git stash 相關(guān)命令
1、git stash
2、git stash save '注釋'
3、git stash list
4、git stash pop
5、git stash apply?stash@{編號(hào)}
6、git stash drop stash@{編號(hào)}
7、git stash clear
8、git stash show
??解決方法:
問(wèn)題現(xiàn)象:
????????今天在項(xiàng)目想到一個(gè)問(wèn)題:
? ? ? ? 在同一個(gè)代碼倉(cāng)庫(kù)中,如果我在當(dāng)前分支(如:task/111-001-demo)上正在敲著代碼,還沒(méi)完成的;突然來(lái)個(gè)緊急任務(wù)要我切換到另一個(gè)分支(如:emergency)去修復(fù)某個(gè)bug或新增某個(gè)功能,那我當(dāng)前分支還沒(méi)寫(xiě)完的代碼該怎么處置/保存呢?很顯然我們需要在切換分支之前保存當(dāng)前分支上的代碼改動(dòng)。
? ? ? ? 那么問(wèn)題來(lái)了:
????????在切換分支之前該如何保存當(dāng)前分支上的代碼改動(dòng)呢?
? ? ? ? 最近發(fā)現(xiàn)了一種新的方法:就是使用 git stash 命令就可以很完美地解決上面這個(gè)問(wèn)題,但在實(shí)際開(kāi)發(fā)過(guò)程中很多人都是能不敲命令就不敲命令,于是就引出了一個(gè)新的問(wèn)題:
????????IDEA中如何實(shí)現(xiàn) git stash 命令的可視化操作?
問(wèn)題分析:
? ? ? ? 我們可以分析一下上面這種情況:
1、由于是緊急任務(wù)(如:生產(chǎn)環(huán)境出現(xiàn)bug需要盡快解決),那么該任務(wù)優(yōu)先級(jí)必然是最高的,需要優(yōu)先處理。
2、由于緊急任務(wù)所在代碼分支與當(dāng)前代碼的分支不同,因此需要切換分支。
3、當(dāng)前分支有尚未完成的代碼,需要保存,因?yàn)?strong>直接切換分支會(huì)導(dǎo)致當(dāng)前分支上的改動(dòng)丟失。
? ? ? ? OK,問(wèn)題要素分析完了,可以發(fā)現(xiàn)最關(guān)鍵就是要保存當(dāng)前代碼的改動(dòng)!那么順序就應(yīng)該是:
1、保存當(dāng)前代碼分支(如:task/111-001-demo)的改動(dòng);
2、切換到緊急任務(wù)分支(如:emergency);
3、解決緊急任務(wù);
4、切換回當(dāng)前分支(如:task/111-001-demo)繼續(xù)開(kāi)發(fā)之前尚未完成的代碼。
? ? ? ? 切記:在多人協(xié)作開(kāi)發(fā)的場(chǎng)景下,不要把當(dāng)前分支未完成開(kāi)發(fā)的代碼 commit并push 到遠(yuǎn)程庫(kù),然后直接去做你的緊急任務(wù)去了。因?yàn)檫h(yuǎn)程庫(kù)的改動(dòng)很容易影響到其他開(kāi)發(fā)者。
????????那么在切換分支之前該如何保存當(dāng)前分支上的代碼改動(dòng)呢?下面提供2種我以前常用的笨方法:
? ? ? ? 1、將當(dāng)前分支下發(fā)生了改動(dòng)的文件都拷貝一份到某個(gè)自定義的備份目錄中,后期切換回當(dāng)前分支時(shí)再拷貝回去。
? ? ? ? 優(yōu)點(diǎn):將發(fā)生改動(dòng)的文件都備份起來(lái),這樣絕對(duì)不會(huì)發(fā)生丟失的問(wèn)題。
? ? ? ? 缺點(diǎn):操作復(fù)雜而繁瑣,如果要精確到具體發(fā)生改動(dòng)的文件,則不僅需要挑出這些文件,還需要記錄這些文件對(duì)應(yīng)的存放路徑;或者將整個(gè)父級(jí)目錄備份,但很可能會(huì)包含沒(méi)有發(fā)生改動(dòng)過(guò)的文件,因此在子文件很多的時(shí)候,有些浪費(fèi)時(shí)間和精力。
? ? ? ? 2、在當(dāng)前分支commit,后期切換回當(dāng)前分支時(shí)可以直接在之前commit后的基礎(chǔ)上繼續(xù)開(kāi)發(fā)。
? ? ? ? 優(yōu)點(diǎn):操作簡(jiǎn)單方便,由于commit是提交到本地庫(kù),因此不會(huì)影響到遠(yuǎn)程庫(kù),也不會(huì)影響到其他開(kāi)發(fā)者。
? ? ? ? 缺點(diǎn):當(dāng)開(kāi)發(fā)完成,需要push到遠(yuǎn)程庫(kù)時(shí),則需要執(zhí)行commit和push操作,因此最終遠(yuǎn)程庫(kù)上就會(huì)出現(xiàn)多條commit日志。
????????那么,除了上面提到的2種笨方法之外,有沒(méi)有更完美的第3種方法呢?
? ? ? ? 確實(shí)有的,那就是使用 git stash 命令。
????????3、在當(dāng)前分支,使用 git stash 操作可以將本地庫(kù)對(duì)當(dāng)前分支的所有改動(dòng)放入本地緩存區(qū)(該緩存區(qū)未被刪除,則會(huì)一直存在于本地庫(kù)中),緩存完后當(dāng)前分支就會(huì)回復(fù)到上一次從遠(yuǎn)程庫(kù)pull之后的狀態(tài),此時(shí)可以直接切換到緊急任務(wù)分支去了,后期切換回當(dāng)前分支時(shí),重新加載本地緩存區(qū)即可還原到緩存前的狀態(tài)。
? ? ? ? 優(yōu)點(diǎn):不會(huì)影響遠(yuǎn)程庫(kù),也不需要commit操作。
? ? ? ? 缺點(diǎn):沒(méi)有什么明顯的缺點(diǎn),硬要說(shuō)的話,就是操作會(huì)比直接commit的操作復(fù)雜一點(diǎn)點(diǎn)。
????????最近我才發(fā)現(xiàn) git stash 命令的好用之處,估計(jì)也有很多小伙伴在實(shí)際開(kāi)發(fā)中未曾使用過(guò) git stash 命令。
? ? ? ? 我猜:原因大概是因?yàn)樵贗DEA中,我們可以很明顯的點(diǎn)擊可視化按鈕,如下:
?????????來(lái)快速實(shí)現(xiàn)commit和push操作,而不需要敲任何git命令。
拓展:git stash 相關(guān)命令
1、git stash
? ? ? ? 創(chuàng)建stash緩存/暫存,保存當(dāng)前分支的本地工作區(qū)與暫存區(qū)的狀態(tài),stash名為stash@{編號(hào)}。
2、git stash save '注釋'
????????創(chuàng)建stash緩存/暫存,保存當(dāng)前分支的本地工作區(qū)與暫存區(qū)的狀態(tài),stash名為stash@{編號(hào)},并添加注釋。與 git stash 的區(qū)別是:可以加注釋。
????????git stash save 'test git stash 001'
3、git stash list
????????查看stash列表,可以看到本地庫(kù)中當(dāng)前分支上的創(chuàng)建的所有stash。
4、git stash pop
????????還原至最新的一個(gè)stash(即stash@{0})的狀態(tài),并刪除該stash。
? ? ? ? 注意:該命令會(huì)在還原至stash@{0}的狀態(tài)后,刪除stash@{0}。
5、git stash apply?stash@{編號(hào)}
????????還原至指定stash(即stash@{編號(hào)})的狀態(tài)。與 git stash pop 的區(qū)別是:不會(huì)刪除stash,所以還原stash的時(shí)候,建議使用apply命令。
? ? ? ? 使用方法:git stash apply stash@{編號(hào)}
6、git stash drop stash@{編號(hào)}
? ? ? ??刪除某個(gè)指定stash,無(wú)法指定多個(gè),一次只能刪除一個(gè)。
? ? ? ? 使用方法:git stash drop stash@{編號(hào)}
7、git stash clear
????????刪除全部的stash。
8、git stash show
????????查看堆棧中最新保存的stash(最新保存的stash名一定是:stash@{0})和當(dāng)前分支(緩存完后當(dāng)前分支就會(huì)回復(fù)到上一次從遠(yuǎn)程庫(kù)pull之后的狀態(tài))的差異,顯?做了哪些改動(dòng)。
? ? ? ? 例如StaticClass.java文件,我敲了2個(gè)回車(chē),則show結(jié)果如下:
? ? ? ? 對(duì)比stash@{0}和當(dāng)前分支差異之后,檢測(cè)到路徑為:
????????src/main/java/com/stephen/javademo/statictest/StaticClass.java?
????????有1個(gè)文件,和上一次從遠(yuǎn)程庫(kù)pull之后的狀態(tài)相比,發(fā)生了2個(gè)插入改動(dòng)(2個(gè)回車(chē)符)。
? ? ? ? 上面的拓展節(jié)點(diǎn)中,給大家介紹了一些git stash的常用命令,那么在實(shí)際開(kāi)發(fā)中,是不是就一定要敲命令呢?
? ? ? ?【我知道有些人是比較懶或記性差的,我自己也是,能鼠標(biāo)操作的,絕對(duì)敲命令,而且我也不想即命令。。。。。。這一點(diǎn),請(qǐng)大家不要向我學(xué)習(xí)。】
? ? ? ? 經(jīng)過(guò)實(shí)踐,我終于在IDEA開(kāi)發(fā)工具中摸索出了最簡(jiǎn)單的stash使用方式。
??解決方法:
? ? ? ? 緩存/暫存本地庫(kù)中對(duì)當(dāng)前分支的所有改動(dòng),在IDEA開(kāi)發(fā)工具中的操作步驟如下:
? ? ? ? 1、創(chuàng)建stash:點(diǎn)擊菜單欄的?VCS-Git-Stash Changes... :
? ? ? ? 彈出窗口如下,輸入Message,勾選Keep index,點(diǎn)擊 Create Stash按鈕,如下:
????????這一步其實(shí)就相當(dāng)于調(diào)用了命令?git stash save 'test stash1';
? ? ? ? 而 Keep index 的作用,直接上圖吧:
? ? ? ? 翻譯過(guò)來(lái)的意思就是說(shuō):如果選中此復(fù)選框,則索引更改將保存在索引中。
? ? ? ? ?這個(gè)功能我就先不探究了,留給剛興趣的小伙伴去實(shí)踐一下,目前我就建議大家直接勾選就好了。
? ? ? ? ?2、查看stash列表:點(diǎn)擊菜單欄的?VCS-Git-UnStash Changes... :
? ? ? ? 彈出窗口,在Stashes項(xiàng)中可以看到我創(chuàng)建了4個(gè)stash,從上到下(從0到3)分別是最新到最舊。
????????除此之外,還發(fā)現(xiàn)該窗口有很多非常實(shí)用功能,而且還對(duì)應(yīng)了拓展節(jié)點(diǎn)中提到的大部分常用的 git stash 命令,例如:
????????View:可以查看選中的stash中記錄了什么文件及文件中的改動(dòng),如我選中第一個(gè)stash點(diǎn)擊View:
? ? ? ? 雙擊打開(kāi)窗口中的StaticClass.java文件,可以查看具體的改動(dòng),如:
????????Drop:相當(dāng)于git stash drop stash@{編號(hào)},可以刪除選中的stash。
? ? ? ? 這里我測(cè)試一下刪除最后一個(gè)stash(即stash@{3}),如圖:
?? ? ?
????????Clear:相當(dāng)于git stash clear,刪除所有的stash。
? ? ? ? 測(cè)試Clear,如圖:
? ? ? ? ?點(diǎn)擊Yes后,所有stash被刪除:
????????Pop stash:勾選之后,會(huì)發(fā)現(xiàn)原來(lái)的Apply Stash按鈕變成了Pop Stash,就相當(dāng)于git stash pop命令,還原至選中的stash,并刪除該stash。?
? ? ? ? 測(cè)試Pop Stash選中的stash(stash@{2}):
????????可以發(fā)現(xiàn)Pop Stash之后,stash@{2}被自動(dòng)刪除了。
? ? ? ? Apply Stash:相當(dāng)于git stash apply?stash@{編號(hào)}命令,還原至選中的stash。
? ? ? ? 測(cè)試Apply Stash選中的stash@{1}之后,發(fā)現(xiàn)stash@{1}還存在,未被自動(dòng)刪除。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-778171.html
????????至此就完成了IDEA中實(shí)現(xiàn) git stash 命令的可視化操作了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-778171.html
到了這里,關(guān)于IDEA中如何實(shí)現(xiàn) git stash 命令的可視化操作?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!