IDEA如何同時對多個功能進行處理

2018-12-18 11:08 更新

有時您使用IntelliJ IDEA需要在不完成任務(wù)的情況下切換不同的任務(wù),然后返回給他們。IntelliJ IDEA為您提供了幾種方式來方便地處理幾種不同的功能,并且不會丟失任何需要進行的工作:

  • 您可以儲藏(stash)或擱置待更改。隱藏的變化與擱置非常相似。唯一的區(qū)別在于補丁的生成和應(yīng)用的方式。Git生成Stahes,可以從IntelliJ IDEA內(nèi)部或外部應(yīng)用。具有擱置更改的修補程序由IntelliJ IDEA生成,也通過IDE應(yīng)用。另外,儲藏涉及所有未提交的更改,而當(dāng)您對擱置架進行更改時,可以選擇一些本地更改,而不是將其全部擱置。
  • 您可以在不同的更改列表中保留與不同任務(wù)或功能相關(guān)的更改。
  • 您可以創(chuàng)建分支來處理不同的不相關(guān)的功能。

擱置改變

擱置暫時存儲尚未提交的待處理更改。例如,如果您需要切換到另一個高優(yōu)先級的任務(wù),并且希望將更改放在一邊以便稍后處理,則此方法很有用。

使用IntelliJ IDEA,您可以擱置單獨的文件和整個更改列表。

一旦擱置,可以根據(jù)需要隨時多次更換,然后擱置,然后將其恢復(fù)到擱置上。

將更改放到一個架子上

您可以通過選擇Changelist(更改列表)下拉菜單,從Shelve Changes(擱置更改)對話框切換到其他更改列表。

  1. 打開"版本控制工具"窗口(Alt+9)并切換到“本地更改”選項卡。
  2. 選擇要放在架子上的文件或更改列表。在主版本控制菜單或選擇的上下文菜單上,選擇“擱置更改”。
  3. 在“Shelve Changes”對話框中,查看已修改文件的列表。
  4. 在“提交消息”字段中,輸入要創(chuàng)建的貨架的名稱,然后單擊“擱置更改”按鈕。

為避免多個擱置同名(例如Default),您可以簡單地將文件或更改列表從“本地更改”選項卡拖放到“擱置”選項卡,等待一秒鐘,直到它被激活,并在釋放鼠標(biāo)按鈕時即時編輯新的擱置名稱。

也可以在不顯示"擱置更改"對話框的情況下,靜默地擱置更改。為此,請選擇要擱置的文件或更改列表,然后單擊工具欄上的Shelve Silently圖標(biāo) ,或按 Ctrl+Alt+H。包含您要擱置的更改的更改列表的名稱將用作貨架名稱。

取消擱置更改

不負(fù)責(zé)任的是將推遲的更改從擱架移動到待處理的更改列表。未保存的更改可以從視圖中濾除或從貨架上移除。

  1. 在“版本控制工具”窗口的“貨架”選項卡中,選擇要取消擱置的更改列表或文件。
  2. 按下Ctrl+Shift+U或從選擇的上下文菜單中選擇Unshelve。
  3. 在打開的“Unshelve Changes”對話框中,在“Name”字段中指定要更改未保存更改的更改列表。您可以從下拉列表中選擇一個現(xiàn)有變更列表,或為包含未保存變更的新變更列表輸入名稱。您可以在“Comment”字段中輸入新變更列表的描述(可選)。如果要使新的更改列表處于活動狀態(tài),請選擇"設(shè)置活動"選項。否則,當(dāng)前活動的更改列表保持活動狀態(tài)。
  4. 如果您希望IntelliJ IDEA在停用時保留與新變更列表關(guān)聯(lián)的任務(wù)的上下文并恢復(fù)上下文,那么使變更列表變?yōu)榛顒訝顟B(tài),請選擇“追蹤上下文”選項(請參閱“管理任務(wù)和上下文”以了解詳細(xì)信息)。
  5. 如果要刪除要取消擱置的更改,請選擇:從擱置選項中刪除已成功應(yīng)用的文件。未擱置的文件將被從這個架子上移除,并被添加到另一個更改列表中并標(biāo)記為已應(yīng)用。直到通過單擊工具欄上的 圖標(biāo)或從上下文菜單中選擇“清除已取消未保存的內(nèi)容”,它們才會完全刪除。
  6. 點擊“確定”。如果修補版本和當(dāng)前版本之間發(fā)生沖突,請按照“解決沖突”中的說明解決它們 。

您還可以將文件或更改列表從“擱置”選項卡拖放到“本地更改”選項卡,以靜默取消擱置。

您也可以靜默地取消保存更改,而不顯示“Unshelve Changes”對話框。為此,請選擇要取消擱置的文件或更改列表,然后單擊工具欄上的“取消擱置無圖標(biāo)”圖標(biāo) ,或按 Ctrl+Alt+U。未保存的文件將被移動到活動掛起更改列表。

還原未保存的更改

IntelliJ IDEA可以讓您在必要時重新應(yīng)用未保存的更改。所有未保存的更改都可以重復(fù)使用,直到通過單擊工具欄上的 圖標(biāo)或從上下文菜單中選擇“清除已取消未保存的內(nèi)容”以顯式刪除它們。

要恢復(fù)貨架上應(yīng)用的更改,請執(zhí)行以下操作:

  1. 確保已啟用顯示已取消擱置的工具欄選項 。
  2. 選擇要還原的文件或貨位。
  3. 在選擇的上下文菜單上,選擇還原。

應(yīng)用外部補丁

您可以導(dǎo)入在IntelliJ IDEA內(nèi)部或外部創(chuàng)建的修補程序,并將其應(yīng)用為擱置更改。

  1. 在版本控制工具窗口的“擱置”選項卡中,從上下文菜單中選擇“導(dǎo)入修補程序 ”。
  2. 在打開的對話框中,選擇要應(yīng)用的修補程序文件。所選修補程序作為一個架子出現(xiàn)在“擱置”選項卡中。
  3. 選擇新添加的帶有修補程序的架子,然后從所選內(nèi)容的上下文菜單中選擇Unshelve Changes。

自動擱置基本修改

將IntelliJ IDEA配置為始終擱置Git版本控制下的文件的基本版本可能會很有用。要做到這一點,打開“設(shè)置”對話框(Ctrl+Alt+S),選擇左邊的版本控制|擱置(Version Control | Shelf)節(jié)點,并選擇"分布式版本控制系統(tǒng)"選項下的文件擱置基礎(chǔ)修訂。

如果啟用此選項,則文件的基本修訂將被保存到三路合并期間使用的擱置,如果應(yīng)用擱置會導(dǎo)致沖突。如果被禁用,IntelliJ IDEA將在項目歷史記錄中查找基本版本,這可能需要一段時間;此外,有沖突的擱置是基于修改可能會丟失(例如,如果由于基操作而更改了歷史記錄)。

更改默認(rèn)的擱置位置

默認(rèn)情況下,擱置目錄位于您的項目目錄下。但是,您可能需要更改默認(rèn)的擱置位置。例如,如果您希望避免在清理工作副本時意外刪除擱置,或者希望將其存儲在單獨的存儲庫中,以允許在您的團隊成員之間共享擱置,這可能很有用。

  1. 打開“設(shè)置”對話框(Ctrl+Alt+S)并選擇左側(cè)的:版本控制|擱置節(jié)點。
  2. 單擊“更改擱置位置”按鈕,然后在打開的對話框中指定新的位置。
  3. 如有必要,請選擇"將擱置移動到新位置"選項以將現(xiàn)有擱置移動到新目錄。

儲藏(stash)更改

有時可能需要將工作副本恢復(fù)為與HEAD提交相匹配,但是您不希望丟失已完成的工作。如果您知道上游的變化可能與您正在做的事情相關(guān),或者您需要做出一些緊急修復(fù),則可能會發(fā)生這種情況。

存儲涉及記錄HEAD提交和工作目錄(儲藏(stash))的當(dāng)前狀態(tài)之間的差異。索引的更改也可以儲藏起來。

Unstashing 涉及將存儲的儲藏處應(yīng)用到分支。

您可以將儲藏應(yīng)用到現(xiàn)有分支,或者在其基礎(chǔ)上創(chuàng)建新的分支。

您可以根據(jù)需要多次使用儲藏(stash),只需切換到所需的分支即可。請記?。?/p>

  • 在一系列提交之后應(yīng)用儲藏會導(dǎo)致需要解決的沖突。
  • 您不能將存儲應(yīng)用于“不干凈(dirty)”工作副本,即具有未提交更改的工作副本。

保存對儲藏的更改

  1. 從主菜單中選擇:VCS | Git | 儲藏更改。
  2. 在打開的Stash對話框中,選擇適當(dāng)?shù)腉it根并確保簽出正確的分支。
  3. 在“Message”字段中描述您將要儲藏的更改。
  4. 要儲藏本地更改,并將索引中的更改提交給工作樹進行檢查和測試,請選擇“保留索引”選項。
  5. 點擊“創(chuàng)建儲藏”。

應(yīng)用一個儲藏

要應(yīng)用儲藏,請執(zhí)行以下操作:

如果有沖突,此操作可能會失敗。發(fā)生這種情況是因為沖突存儲在索引中,因此您無法再將這些更改應(yīng)用于其原始狀態(tài)。

  1. 從主菜單中選擇:VCS | Git | Unstash變化。
  2. 選擇您想要應(yīng)用儲藏的Git根,并確保簽出正確的分支。
  3. 從列表中選擇您想要應(yīng)用的儲藏。如果要檢查選定儲藏中的哪些文件受到影響,請單擊“查看”。
  4. 要在應(yīng)用后刪除所選的儲藏,選擇“彈出儲藏”選項。
  5. 要應(yīng)用隱藏的索引修改,請選擇“恢復(fù)索引”選項。
  6. 如果要基于選定的儲藏來創(chuàng)建新分支,而不是將其應(yīng)用于當(dāng)前檢出的分支,請在“新建分支”字段中鍵入該分支的名稱。

要刪除某個儲藏,請在列表中選擇它,然后單擊“刪除”。要刪除所有的包裝,請點擊“清除”。

將更改分組到不同的更改列表

當(dāng)您正在處理幾個相關(guān)的功能時,可能會發(fā)現(xiàn)將更改分組到不同的更改列表中很方便。這種方法有其優(yōu)點和缺點,而不是使用功能分支來處理多個任務(wù)。

優(yōu)點:

  • 您可以輕松地在不同的邏輯集之間進行切換,并將它們彼此分開提交。
  • 與使用分支機構(gòu)來達(dá)到同樣的目的不同的是,您手頭上的所有更改都不需要在分支之間切換,如果您的項目真的很大,則可能需要一段時間。
  • 測試不同功能如何協(xié)同工作是很方便的。
  • 您可以在構(gòu)建服務(wù)器上遠(yuǎn)程運行更改列表。

缺點:

  • 與分支相比,使用更改列表可能看起來更輕量級,但這并不安全,因為除非您提交并推送更改,否則您的更改沒有備份。如果您的本地工作副本出現(xiàn)問題,您的所有更改將會丟失,因為它們不屬于Git項目歷史記錄。
  • 如果更改不重疊,則只能使用更改列表。如果不同的任務(wù)影響同一文件,則不能分開這些更改并將其放入單獨的更改列表中。
  • 功能的原子測試是不可能的。
  • 在同一個功能上合作是不可能的。另外,除非您通過電子郵件發(fā)送修改補丁,否則你不能從不同的機器做貢獻,這可能不是很方便。

所有更改列表都顯示在版本控制工具窗口的“本地更改”選項卡中。所有修改后的文件都會自動放置在活動變更列表中,這是默認(rèn)的更改列表,除非您創(chuàng)建了另一個變更列表并使其處于活動狀態(tài)。

要創(chuàng)建一個新的更改列表,請單擊工具欄上的 。

要使非默認(rèn)更改列表處于活動狀態(tài),請右鍵單擊該列表并從上下文菜單中選擇“設(shè)置活動更改列表”。

如果要在更改列表之間移動更改,請選擇要移動的文件,然后單擊工具欄上的 ,或從上下文菜單中選擇"移動到其他列表"。

  1. 如果要使列表與將要丟棄的活動列表的更改一起使用,請選擇"設(shè)置活動"選項。
  2. 如果您希望IntelliJ IDEA記住您的上下文,并在編輯器中重新加載當(dāng)前打開的文件(當(dāng)此列表變?yōu)榛顒訝顟B(tài)時),請選擇"跟蹤上下文"選項。

您也可以在更改列表之間拖放文件。

使用功能分支

Git中的一個分支代表了一條獨立的開發(fā)行,所以如果您在準(zhǔn)備共享工作結(jié)果并將其集成到母版中之前要完成并測試一個獨立的功能,則在功能分支中執(zhí)行它是最好的解決方案。這樣可以確保不穩(wěn)定的代碼不會被提交到項目的主代碼庫中,并且如果需要,您可以輕松地切換到其他任務(wù)。

優(yōu)點:

  • 與使用更改列表來分組更改相反,使用功能分支是安全的。在對Git進行更改后,它們將成為Git項目歷史記錄的一部分,所以即使您損壞了工作樹,也可以通過Git reflog來恢復(fù)提交 。推送更改后,它們將被備份。
  • 您可以開發(fā)并行的非相關(guān)功能并以原子方式進行測試。
  • 當(dāng)您在分支中完成開發(fā)時,您可以重新排序或壓縮提交,以便您的歷史記錄是線性和干凈的。
  • 在您的功能上進行協(xié)作很容易,或者從不同的機器開發(fā)它。

缺點:

  • 在真正的大型項目上切換分支可能需要時間。
  • 將相關(guān)特性一起測試并不十分方便。
  • 您必須學(xué)習(xí)使用功能分支并將更改集成到主代碼庫的工作流。

有兩種主要方法可以使用功能分支并將您的更改集成到主代碼庫中:

  • merge選項
  • rebase選項

使用合并來集成功能分支中的更改

合并選項的主要優(yōu)點是完全可追溯性,因為合并到主代碼庫中的提交保留了其原始哈希和作者,并且屬于一個功能的所有提交可以組合在一起。

此工作流適合于將對主代碼庫的更改涉及請求請求或分層審批過程的項目,因為現(xiàn)有的分支不會以任何方式進行更改。

這種方法的主要缺點是,每次需要合并更改時都會創(chuàng)建無關(guān)的合并提交,這嚴(yán)重污染了項目歷史并使其難以閱讀。

合并選項工作流程涉及以下步驟:

  1. 為您的單獨開發(fā)行創(chuàng)建一個分支。
  2. 在開發(fā)過程中提交您的更改。
  3. 將分支推送到遠(yuǎn)程存儲庫。此操作應(yīng)用于備份,以便您可以從不同的計算機進行協(xié)作或工作。
  4. 當(dāng)您需要執(zhí)行與您的功能無關(guān)的工作時,請切換到其他分支。
  5. 檢查和測試您的功能,并進行必要的修復(fù)。
  6. 當(dāng)您準(zhǔn)備將工作結(jié)果集成到主分支(例如master)時,請執(zhí)行以下操作:
    • 將您的功能分支合并到主代碼庫中。
    • 刪除功能分支。
    • 推入(push)。

使用rebase來集成來自功能分支的更改

這個選項的主要好處是,您可以得到一個清晰的項目歷史,可以使其他人很容易閱讀和理解。您的日志不包含merge操作產(chǎn)生的不必要的合并提交,并且您可以獲得易于瀏覽和搜索的線性歷史記錄。

當(dāng)決定采用這個工作流程時,您應(yīng)該記住,rebase重寫項目歷史記錄,因為它為原始功能分支中的每個提交創(chuàng)建新的提交,因此它們將具有不同的哈希,從而妨礙可追溯性。

基礎(chǔ)選項涉及以下步驟:

使用您的首字母縮寫或昵稱(如果它很短)作為您的功能分支名稱的前綴是有意義的。通過這種方式,您可以在“分支”菜單中使用“速度搜索”輕松找到所有分支。

  1. 為您的單獨開發(fā)行創(chuàng)建一個分支。
  2. 在開發(fā)過程中經(jīng)常提交您的更改。
  3. 將分支推送到遠(yuǎn)程存儲庫。此操作應(yīng)用于備份,以便您可以從不同的計算機進行協(xié)作或工作。
  4. 時不時rebase您的功能分支到 master。如果您的功能分支很長,那么這樣做才有意義。這有助于:
    • 確保您的功能分支和master不相距太遠(yuǎn)。
    • 避免在最終將更改集成到主代碼庫時解決許多沖突。當(dāng)您經(jīng)常重新定義的時候,您可以迭代地解決沖突,而不會最終與長時間的差異進行斗爭。
    • 加快檢查分支,因為分支之間的切換一旦發(fā)生充分分歧就會變慢。
    重新激活涉及以下步驟:
    • 從遠(yuǎn)程獲取更改,或?qū)⒏耐系絤aster分支中。
    • rebase您的分支到master。
    • 強制將rebase操作的結(jié)果推送到您的功能分支。
  5. 當(dāng)您需要執(zhí)行與功能無關(guān)的工作時,請切換到master。當(dāng)您返回到您的功能分支時,請使用rebase進行簽出。
  6. 檢查和測試您的功能,并進行必要的修復(fù)。
  7. 當(dāng)功能完成時,執(zhí)行交互式rebase。這允許您重新排序和壓縮提交,使您的功能分支歷史看起來不錯,干凈。
  8. 當(dāng)您準(zhǔn)備將工作結(jié)果集成到主分支(例如master)時,請執(zhí)行以下操作:
    • 簽出master分支。
    • 將您的分支與master合并。由于master沒有分支,Git會將指針向前移動到功能分支的最新提交,而不是創(chuàng)建新的合并提交(這稱為 fast-forward 合并)。
    • 刪除功能分支。
    • 推入(push)。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號