分享方式:


復原指令 (Team Foundation 版本控制)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 |Visual Studio 2022

您可以使用 Team Foundation 版本控制 (TFVC) tf rollback 命令來復原一或多個版本控制專案上一或多個變更集的效果。 此命令不會從專案的版本歷程記錄中移除變更集。 相反地,此命令會在工作區中建立一組暫止的變更,以否定您指定的變更集的影響。

必要條件

若要使用此命令,您必須將 [讀取]、[取出] 和 [簽到 許可權] 設定為 [允許]。 如需詳細資訊,請參閱 預設 TFVC 許可權

語法

tf rollback /toversion:VersionSpec ItemSpec [/recursive] [/lock:none|checkin|checkout] [/version:versionspec] [/keepmergehistory] [/login:username,[password]] [/noprompt]
tf rollback /changeset:ChangesetFrom~ChangesetTo [ItemSpec] [/recursive] [/lock:none|checkin|checkout] [/version:VersionSpec]
[/keepmergehistory] [/noprompt] [/login:username,[password]]

參數

引數

Argument

說明

<ChangesetFrom>~<ChangesetTo>

使用這個自變數搭配 /changeset 選項來指定您想要復原的變更集。 您可以透過下列方式指定變更集:

  • 單一變更集,例如 /changeset:C11
  • 變更集的範圍,例如 /changeset:C7~C20
  • 日期,例如 /changeset:D09/30/09
  • 日期範圍,例如 /changeset:D09/23/09~D10/07/09
  • 最新的變更集, /changeset:Tip/changeset:T

<ItemSpec>

使用此自變數來指定您想要復原的一或多個專案。 如果您使用 /toversion 選項,則必須指定這個自變數。

如需 TFVC 如何剖析專案規格的詳細資訊,請參閱 使用 Team Foundation 版本控制命令

注意

您可以指定多個 itemspec 自變數。

<VersionSpec>

選項和 /toversion 選項的使用者提供值/version

使用這個自變數搭配 /toversion 選項,將檔案還原為特定變更集中的狀態。 您可以透過下列方式指定版本:

  • 單一變更集,例如 /toversion:C32
  • 例如,午夜的日期 /toversion:D06/19/09
  • 日期和時間,例如 /toversion:D06/19/09T14:32
  • 標籤,例如 /toversion:LTestLabel
  • 對應至目前目錄之工作區中的版本, /toversion:W
  • 特定工作區中的版本,例如 /toversion:WResolveRIConflicts;AKerry

如需 TFVC 如何剖 versionspec析 的詳細資訊,請參閱 使用 Team Foundation 版本控制命令

選項。

選項

說明

/changeset

使用此選項可指定您想要否定的一或多個特定變更集。

/keepmergehistory

只有在復原的一或多個變更集包含 分支合併 變更時,此選項才會生效。 如果您想要讓相同來源與相同目標之間的未來合併排除您要復原的變更,請指定此選項。

/lock

指定此選項可防止其他使用者簽入或簽出專案,直到您完成回復所有相關聯的變更為止。 如需詳細資訊,請參閱 瞭解鎖定類型

鎖定選項:

  • None. 預設。 未套用鎖定。 如果您復原的檔案已鎖定,此選項會移除鎖定。
  • Checkin. 鎖定專案,直到您執行簽入來釋放鎖定為止。 其他使用者可以簽出指定的專案,但用戶無法在移除鎖定之前簽入修訂。 您無法鎖定已鎖定的檔案。
  • Checkout. 防止使用者簽入或簽出鎖定的專案,直到您執行簽入來移除鎖定為止。

/login

如需此選項的相關信息,請參閱 使用選項來修改命令的運作方式。

/noprompt

使用此選項可隱藏此作業期間所顯示的任何對話框。

/recursive

如果您想要讓作業在子資料夾中包含專案,請指定此選項。

/toversion

指定此選項可將檔案還原為特定變更集中的狀態。 當您使用此選項時,會否定自您指定版本以來套用的所有變更集的效果。

/version

指定您要復原之檔案和資料夾的目前版本。

備註

命令 tf rollback 會否定您針對所指定之每個專案所指定之每個變更集的效果。 下表列出作業如何否定每種變更。

回復的變更類型 回復變更的類型
addbranchundelete delete
edit edit
encoding encoding
rename/move rename/move
delete undelete
合併 變更會否定合併至最新分支的任何變更。

下列清單提供命令所產生的 rollback 一些變更範例:

  • 您會復原發生新增變更的變更集。 回復作業會導致 回復 變更和 刪除 變更。

  • 您會復原發生編輯變更的變更集 521。 回復作業會導致回復變更,以及取消變更集 521 中編輯變更的編輯變更。

  • 在變更集 132 中,您從 $/BranchA/File1.txt 合併到 $/BranchB/File1.txt。 該合併中的變更包含 變更集 92 和 104 中的編輯 變更。 在變更集 162 中,您會復原變更集 132,這會導致回復變更,並將編輯變更為 $/BranchB/File1.txt,以否定變更集 92 和 104 中的編輯變更。

結束代碼

執行 命令之後 tf rollback ,下表會出現結束代碼。

結束代碼 描述
0 作業已成功回復所有專案。
1 作業已成功回復一個專案,但無法回復一或多個專案。
100 作業無法回復任何專案。

範例

下列範例會否定變更集 23 對該變更集中變更的所有項目的影響:

c:\workspace> tf rollback /changeset:C23

下列範例會否定檔案a.txt變更集 23 的效果:

c:\workspace> tf rollback /changeset:C23 a.txt

下列範例會變更 a.txt 的內容,以符合已簽入且變更集 23 的版本:

c:\workspace> tf rollback /toversion:C23 a.txt

下列範例會變更 OurTeamProject 的內容,以符合在 2009 年 8 月 31 日午夜或午夜之前套用的最後一個變更集:

c:\workspace> tf rollback /toversion:D08/31/2009 /recursive $/OurTeamProject/

範例 /keepmergehistory 選項

當您復原包含分支或合併變更的變更集時,通常希望相同來源與相同目標之間的未來合併來包含這些變更。 不過,如果您想要將相同來源與相同目標之間的未來合併排除過去合併作業中包含的變更集,您可以使用 /keepmergehistory 選項。 例如:

  1. 在 2009 年 6 月 30 日,您會完整合併 $ /BranchA/$/BranchB/的所有專案。

    c:\workspace> tf merge $/BranchA $/BranchB
    

    您會將此合併簽入為變更集 292 的一部分。

  2. 在 7 月,您進行了數個變更 $/BranchA/Util.cs。 這些變更包含在變更集 297、301 和 305 中。

  3. 在 2009 年 8 月 1 日,您會將 $/BranchA/Util.cs 合併$/BranchB/Util.cs

    c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs
    

    您會在變更集 314 中籤入變更。 此作業的結果是,您在變更集 297、301 和 305 到 $/BranchA/Util.cs 所做的編輯現在也會套用至 $/BranchB/Util.cs

  4. 一周后,您意識到您在 7 月對 $/BranchA/Util.cs 所做的編輯不適合 $/BranchB/Util.cs。 您可以使用 rollback 命令來否定這些變更。 當您使用 rollback 命令來復原 合併 變更或 分支 變更時,您有決定。

    • 如果您想要在 7 月對 $/BranchA/Util.cs所做的變更在未來合併中重新套用至 $/BranchB/Util.cs,請輸入下列命令:

      c:\workspace> tf rollback /changeset:314
      
    • 如果您想要在 7 月對 $/BranchA/Util.cs所做的變更,在未來合併中永遠不要重新套用至 $/BranchB/Util.cs,請輸入下列命令:

      c:\workspace> tf rollback /changeset:314 /keepmergehistory
      
  5. 幾周后,您會將 $/BranchA/ 合併$/BranchB/

    c:\workspace> tf merge $/BranchA $/BranchB
    
    • 如果您在回復時省略/keepmergehistory選項,合併變更會套用至 $/BranchB/Util.cs自變更集 292 以來套用至 $/BranchA/Util.cs 的所有變更集,包括變更集 297、301 和 305。 換句話說,合併會復原復原變更。

    • 如果您在回復時包含 /keepmergehistory 選項,合併作業會套用至 $/BranchB/Util.cs 自變更集 292 起套用至 $/BranchA/Util.cs 的所有變更集,但不包括變更集 297、301 和 305。 換句話說,合併不會復原復原變更。 因此,BranchA的內容可能不符合 BranchB的內容。