保留完整版本變更歷程是版控系統的核心精神之一,檔案項目一旦簽入,就算使用者要求刪除,項目從清單上消失,仍可透過歷史記錄還原每一個曾簽入的版本。
實務上,偶爾會發生不慎誤將不該簽入內容丟上版控的狀況(例如:誤簽入個資或機密敏感內容),此時版控對保留完整軌跡的堅持變成缺點,不管刪除或 Rollback 都無法防止他人透過歷史記錄還原內容。
非常狀況只能用非常手段,在 TFS 上遇此種狀況,tf.exe 工具有個 destroy 指令可以解決問題。
語法範例如下:
tf destroy $/src/path/filename.ext /collection:"httq://tfs-server:8080/tfs/collectionName"

執行者必須具備 Team Foundation Administrators 管理者群組身分,確認刪除後檔案便會從 TFS 移除,從 Changeset、Pending Change、Merge History、Branch History 徹底消失,不留半點痕跡。參考
在 destroy 前,建議先依 TFS 標準做法將該項目刪除。否則可能出現類似下圖的奇特狀態,tfs-destroy-test.txt 已從 Source Controller Explorer 消失,但 Solution Explorer 裡它仍存在且有藍色鎖頭,按右鍵 View History 也能查詢,但查不到任何簽入簽出記錄。

若 destroy 時其他人更動過該檔案而處於 Pending Change(暫止變更)狀況,將出現如下警示:

此時可加上 /preview 參數,tf.exe 將不執行動作,只顯示檔案被哪些人列為 Pending Change。優雅的做法是通知相關人員自行 Undo 後再 destroy;粗暴一點直接刪除也成,該項目將從眾人的 Pending Change 清單消失,可能讓當事人一頭霧水以為撞鬼。
最後提醒,destroy 非正常操作,只能視為修補錯誤簽入動作的迫不得已手段,並有遺失修改歷程、破壞資料一致性的副作用,只能由管理者執行,但遇到不計代價必須抹除資料的情境,算是唯一解法。