在 TortoiseGit 的 Commit 視窗有兩個進階功能,分別是 Assume Unchanged 與 Skip worktree 功能 (如下圖示)。當你試圖 Commit 檔案時,可能會有一些檔案不想被 Commit 進版本,這時你可能會想用這兩個功能,這兩個功能使用起來很像,但還是有些微的差異,差異部分之後另闢文章說明。更重要的是,很多人用了這功能後就悲劇了,因為該檔案再也無法出現在 Commit 視窗之中,然後你就要花上大把時間找到到底怎樣解除,本文也將說明解除檔案不能被 Commit 的窘境。

讓我們先來談談如何避免悲劇吧,當你將已被修改的檔案選取了 Skip worktree 設定,你會看到一個小視窗問你是不是真的要執行這個動作 (如下圖示):

然後你就會發現這些已被修改的檔案從 Commit 視窗中消失了 (如下圖示):

就算你再次修改 README.md 這個檔案,也會是未被修改的狀態,或許你原本就是這樣打算,不過如果我們改變心意了,想把變更提交到版本庫中,那我們該怎麼辦呢?
請你先在資料夾上按下滑鼠右鍵,並選取 TortoiseGit 的 Check for modifications 功能

這個時候你還看不到任何檔案變更,請先勾選如下圖的 Show ignore local changes flagged files 選項

接著你就會在工作目錄下看到那些被標示 Skip worktree 或 Assume Unchanged 的檔案了,請在該檔案上按下滑鼠右鍵,點選 Unflag as skip-worktree and assume-unchanged 即可解除該狀態。


此時該檔案狀態已經改變成 Modified 狀態了,也代表該檔案就會開始出現在 Commit 視窗囉!
備註:你也可以直接點擊右下角的 Commit 按鈕直接開啟 Commit 視窗。

如果你想透過 git 命令解除 Assume Unchanged 與 Skip worktree 的封印,可以參考以下指令:
- git update-index --no-skip-worktree <path>
- git update-index --no-assume-unchanged <path>
相關連結