﻿# TortoiseGit 使用 Assume Unchanged 與 Skip worktree 的注意事項

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

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7d83f74ba266b137d66d-image_2565.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/27ec343704073e2ef586-image_2566.png)

就算你再次修改 README.md 這個檔案，也會是未被修改的狀態，或許你原本就是這樣打算，不過如果我們改變心意了，想把變更提交到版本庫中，那我們該怎麼辦呢？

請你先在資料夾上按下滑鼠右鍵，並選取 TortoiseGit 的 **Check for modifications** 功能

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/aad965c6b6afcc480f33-image_2567.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0afb8a5979259a5a804c-image_2568.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0cf6dd58a173ef3b5f18-SNAGHTML1062edea.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/eaa42eb8af487d9c5fc6-image_2569.png)

此時該檔案狀態已經改變成 **Modified** 狀態了，也代表該檔案就會開始出現在 Commit 視窗囉！

**備註**：你也可以直接點擊右下角的 Commit 按鈕直接開啟 Commit 視窗。

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e99c45075ae86d7299fc-image_2570.png "image")

如果你想透過 git 命令解除 Assume Unchanged 與 Skip worktree 的封印，可以參考以下指令：

-   git update-index \--no\-skip-worktree <path>
-   git update-index \--no\-assume-unchanged <path>

**相關連結**

-   [2.5. Committing Your Changes To The Repository](http://tortoisegit.org/docs/tortoisegit/tgit-dug-commit.html)
-   [git index - Git - Difference Between 'assume-unchanged' and 'skip-worktree' - Stack Overflow](http://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip-worktree)
-   [FallenGameR's blog - git assume-unchanged vs skip-worktree](http://fallengamer.livejournal.com/93321.html)
-   [Git - git-update-index Documentation](https://git-scm.com/docs/git-update-index)
