前言
在日常開發(fā)中,會遇到需要在不同的開發(fā)任務(wù)之間切換的情況,此時,如果手中有尚未寫完的代碼,就需要使用某種方法先保存起來,之后再繼續(xù)處理沒寫完的代碼。
有兩種方法可以解決上述問題:一個是利用IDEA提供的Shelve
功能,另一個是利用Git提供的Stash
功能。
如果你也是一個使用IDEA作為集成開發(fā)環(huán)境的話,而且使用的版本控制管理工具也是Git的話,那這篇文章也許對你在日常工作中遇到上面的情況時有所幫助。
本文中介紹了IDEA的Shelve
與Git的Stash
這兩個功能的特點、如何使用、需要注意的地方。
IDEA的Shelve功能
Shelve是一個什么樣的功能?
Shelve
是IDEA本身提供的一個功能,用來暫時保存尚未commit
的修改。
注意,這里為什么要特別指出“尚未commit
”的修改?
因為IDEA提供的Shelve
這個功能只能作用于被版本控制管理的文件。
也就是說,如果你的文件,沒有被類似Git、Subversion等版本控制軟件管理的話,是無法使用Shelve
這個功能的。
Shelve功能有哪些優(yōu)點?
1.既可以暫存單個文件,也可以暫存整個
ChangeList
中所有文件。2.可以根據(jù)需要多次應(yīng)用被
Shelve
的修改。
如何使用Shelve功能?
在
Local Changes
中找到尚未commit
的文件。右鍵點擊想要
Shelve
的文件或整個ChangeList
。選擇
Shelve Changes...
。會彈出對話框,填寫
Commit Message
一欄(它會作為此次創(chuàng)建的shelf的名字)。然后點擊
Shelve Changes
按鈕。之后,會自動轉(zhuǎn)到
Shelf
一欄(出現(xiàn)在Local Changes
右邊),里面放著所有被Shelve
的文件。
因IDEA在不斷迭代更新,有些地方可能進行了優(yōu)化導致位置可能發(fā)生變化。
所以以上給出的是一個比較通用的方法:直接從Local Changes
中找到需要Shelve
的文件。
如何使用Unshelve功能?
既然文件的修改被Shelve
起來了,肯定還是希望能在某一時刻能恢復(fù)回來繼續(xù)工作。
所以,也就有了對應(yīng)的Unshelve
功能。
大致的步驟如下:
在Shelf
(Local Changes
旁邊)頁面中,找到需要Unshelve
的文件,右鍵單擊在上下文菜單中找到Unshelve...
選項,單擊后在對話框中填寫相關(guān)信息,然后點擊對話框右下角Unshelve Changes
即可。
有哪些需要注意的地方?
在
Unshelve
時,如果當前Local Changes
中某個文件已有的修改與Shelve
中對應(yīng)文件的修改位置相同,則會產(chǎn)生沖突。
Git的Stash功能
Stash是一個什么樣的功能?
Stash
是Git提供的一個功能,會將所有尚未commit
的修改進行儲存。
注意,Stash操作是會將所有尚未commit
的文件都一并保存的。
Stash有什么優(yōu)點?
可以將
Stash
的內(nèi)容應(yīng)用到一個已存在的分支或者以Stash
為基礎(chǔ)創(chuàng)建一個新的分支。
Stash
的內(nèi)容可以根據(jù)需要多次應(yīng)用到所需的任何分支上。
如何使用Stash?
在
Local Changes
中找到尚未commit
的文件。右鍵點擊任意一個文件,出現(xiàn)上下文菜單,將光標移動到Git上。
右邊出現(xiàn)Git的相關(guān)選項,點擊
Stash Changes...
選項。會彈出對話框,在
Message
框中填寫關(guān)于此次stash
內(nèi)容的說明。最后,點擊
Create Stash
按鈕即可。
這里也是選擇了比較通用的方式找到需要被stash
的文件,而不需要關(guān)心IDEA主菜單上關(guān)于Git的變化。
如何使用Unstash功能。
與Shelve
功能有個對應(yīng)的Unshelve
功能一樣,Stash
功能也有一個對應(yīng)的叫UnStash
的功能。
但UnStash
并沒有一個像存儲著Shelve
文件的Shelf
頁面,而是需要在菜單欄的Git中找。
使用的步驟大致如下:
在IDEA主菜單上,找到
Git | Uncommitted Changes | Unstash Changes
選項;出現(xiàn)對話框,選擇想要應(yīng)用
stash
的分支;再從
stash
列表中選擇需要應(yīng)用的stash
;最后點擊
Apply Stash
按鈕即可。
有哪些需要注意的地方?
在一系列的
commit
之后再恢復(fù)stash
時,可能會導致沖突,需要手動解決。恢復(fù)
stash
時,當前的工作區(qū)不能有尚未commit
的修改。
總結(jié)一下兩者的區(qū)別
-
Stash
是Git提供的功能,而shevle
是IDEA本身提供的功能。 -
Stash
只能針對當前整個分支所有未commit
的文件進行操作;而Shelve
更靈活,可以對單個或多個未commit
的文件進行操作; - 要恢復(fù)
stash
的文件時(unstash
操作),如果本地有尚未commit
的修改,那么此次unstash
操作會失敗。IDEA右下角會彈出提醒:你的本地修改將會被merge
覆蓋。請commit
,stash
或revert
它們之后再繼續(xù)。而恢復(fù)shelve
的文件時(unshelve
操作),無論本地有沒有被修改的文件都不會影響。解決可能產(chǎn)生的沖突即可。 -
Stash
的文件是放在.git
文件中;Shelve
的文件是放在.idea/shelf
文件中。這意味著Stash
的文件比Shelve
的文件有更強的可移植性。
最后
本篇文章的目的是為了對IDEA的Shelve
和Git的Stash
兩個功能進行一個大致的比較,并講解最基礎(chǔ)的使用方法。
因此,本篇文章并沒有講解在使用Shelve
或Unshelve
、Stash
或Unstash
時彈出的對話框中更多的具體選項該如何選擇使用,如果希望更好的掌握這兩個功能,可進一步查閱資料了解。
本文參考鏈接:
-
https://www.jetbrains.com/help/idea/2021.3/shelving-and-unshelving-changes.html
-
https://www.jetbrains.com/help/idea/2021.3/work-on-several-features-simultaneously.html文章來源:http://www.zghlxwxcb.cn/news/detail-448864.html
-
https://stackoverflow.com/questions/28008139/git-stash-vs-shelve-in-intellij-idea文章來源地址http://www.zghlxwxcb.cn/news/detail-448864.html
到了這里,關(guān)于IDEA的Shelve與Git的Stash之間的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!