在日常的開發中,有時候我們寫著寫著會發現當時撰寫代碼的狀態不太好,在這樣的狀態下我們可能會希望將目前尚未Commit的內容還原至最近一次Commit的版本。這時,我們可以怎麼做呢?
沒錯,我們就可以一個一個的將代碼修改回去。我們可以使用Rollback功能一次將所有的修改內容還原回去。以下就是我們今天有關Rollback的演示內容。
IntelliJ IDEA Rollback操作前置
在進行Rollback操作之前,為了演示的方便,我們可以先簡單的對我們的代碼進行一些簡單的修改。最好是能包含代碼的修改、新增(未加入index)、新增(加入index)這三種狀態,以便我們能更清楚的了解Rollback操作對代碼狀態的影響。修改後的代碼檔案看起來會像下圖這樣,包含了三種狀態。

(小提示:如果對加入索引不是很了解的朋友,可以參考本教學系列的EP5-如何進行代碼本地項目庫提交動作-COMMIT中的第一小節)(傳送門)
IntelliJ IDEA Rollback操作演示
對已被修改但未提交檔案(藍色)的Rollback操作
1.未操作前的檔案內容

2.進行Rollback操作,在檔案按下【滑鼠右鍵】,依序選擇【Git→Rollback】。

3.此時會彈出一個視窗【Rollback Changes】,在這裡我們可以看到:1.被選擇要進行Rollback操作的檔案2.本次操作受影響的檔案狀態和數量兩種資訊。我們直接點擊【Rollback】按鈕。

4.此時可以看到我們的檔案已經變回白色並且內容也已經被還原到原本的狀態了。

對新增且已經被加入索引的檔案(綠色)操作
1.未操作前的檔案內容

2.進行Rollback操作,在檔案按下【滑鼠右鍵】,依序選擇【Git→Rollback】。
3.此時會彈出一個視窗【Rollback Changes】,我們直接點擊【Rollback】按鈕。
4.此時會看到檔案的顏色變成紅色(未加入索引狀態)且檔案內容沒有被改變。

5.所以我們可以發現,針對新增並且已經加入索引狀態的檔案進行Rollback操作,它只是將這個檔案還原到未加入索引的狀態而已。那麼,有沒有辦法讓這樣的檔案在被進行Rollback操作的同時,也自動的把檔案刪除掉呢?答案是可以的。
對已被修改但未提交檔案(綠色)的Rollback操作-修正版
1.我們先將檔案重新加入索引。

2.再一次的進行Rollback操作。在檔案按下【滑鼠右鍵】,依序選擇【Git→Rollback】
3.在彈出的視窗【Rollback Changes】中,我們可以在下方看到一個選項【Delete local copies of added files】, 我們將它打勾。打勾的意思就代表著我們要在進行Rollback操作的同時也將被新增到索引的檔案刪除。最後我們點擊【Rollback】按鈕。

4.此時會發現檔案也一起被刪除了。是不是方便了很多呢?
對新增且未被加入索引的檔案(紅色)操作
在對這樣的檔案進行Rollback操作時,會發現無法點擊Rollback按鈕。這是因為Rollback是無法對未加入索引的檔案進行操作的。但是在我們的日常實務中,幾乎是很少有這樣的使用情境,所以遇到這樣的狀況,請直接將該檔案刪除就可以囉。

總結
所以,學會了Rollback操作,是不是讓我們想要推倒重來更有效率了呢?最後,Booster在這邊整理了以下表格,方便各位朋友更容易且快速的理解Rollback操作對不同狀態檔案的影響。
| 檔案顏色 | 檔案狀態 | 是不是可以進行Rollback操作 |
|---|---|---|
| 藍色 | 被修改的檔案 | 可以,檔案會被還原至最後一次Commit的狀態。 |
| 綠色 | 本次新增且被加入索引的檔案 | 可以,但是只限於刪除索引。如果要連檔案一起刪除,則必須在視窗【Rollback Changes】中,打勾【Delete local copies of added files】選項。 |
| 紅色 | 本次新增但未被加入索引的檔案 | 不可以。 |




