2010-01-19 147 views
16

是否有可能用另一個覆蓋分支?TFS:用另一個覆蓋分支

或者是刪除分支B並從分支A創建新分支的唯一解決方案?

+0

你爲什麼想這麼做? –

+0

我們有一個分支,其中有一些未完成的代碼簽入它,代碼不再相關。 – Henrik

回答

20

除非你正在運行TFS 2010,否則我建議使用Merge + Resolve來使兩個分支恢復同步。

# cancel out of conflict dialog 
tf merge A B -r -force -version:T 
tf resolve B -r -auto:acceptTheirs 

這應該均衡一切,除了僅在B中創建且從未合併回來的文件。使用文件夾差異來找到&協調它們。

在2005/2008年刪除+ rebranch在未來存在噩夢式調試命名空間衝突的風險。另一種選擇,如果你有2008年的話,就是毀滅+重新分裂。很顯然,它假定你都OK與B.

+3

「2005年/ 2008年的刪除+重新分支將會帶來未來可能出現的噩夢式調試命名空間衝突的風險。」 - 阿門對此! – AakashM

+0

仍然在TFS2013中工作 –

+0

你是什麼意思的「除非你運行TFS 2010」?你會使用TFS 2010中描述的合併和解析組合以外的其他方法嗎?爲什麼? –

-1

刪除分支B和創建分支A.

是否有一個理由,爲什麼你不想做一個新的?

+0

我想保留相同的名稱,並且我想知道是否可能是刪除和重新分配的問題。 – Henrik

+0

沒有問題,我能想到的(除了事實,如果你想這樣做刪除舊分支將是困難的) –

+0

這個答案是downvoted - 我猜 - 因爲歷史將會丟失。但是,如果您的目標是使目標分支與源代碼相同,那麼這個歷史究竟有多重要呢?在某些情況下,這仍然是一種選擇。 –

16

原件在Visual Studio 2010中失去了所有的歷史,我只是用毫無根據的合併來實現這一目標:

TF合併/無根據[來源路徑] [目標路徑] /遞歸

當解決衝突窗口彈出時,選擇'Take source version'選項。請注意,僅存在於目標中的文件不會被使用無基本合併刪除,但您可以比較兩個分支以識別差異並手動刪除它們。

參考:http://msdn.microsoft.com/en-us/library/bb668976.aspx

+1

我認爲這應該是問題的正確答案。正如我上面寫的那樣,'force'選項在所有情況下都不會有用,因爲它仍然基於變更記錄而不是文件內容。 – user2323704

4

我不得不使用Richard Berg's answer成功,但覺得有中缺少的一些細節。這就是我能夠消除與衝突解決方案和變更集有關的差異,這些差異尚未合併回源,並使目標與源相同。請注意,這是我將如何引用分支 - 源是不應該改變的,而目標是應該與源相同的那個。

  1. 確保您的工作區中有源和目標分支的最新版本。另外請確保您沒有任何待處理的更改。
  2. 放棄從目標分支到源分支合併的所有候選。這是爲了防止這些差異之後無意中合併回源代碼分支。

tf merge $/target $/source /recursive /discard

注:確保使TF工具知道要使用的工作區和TFS服務器已經設置了工作文件夾的路徑在工作區中。

  1. 檢查應該處理的分支之間是否存在差異 - 如果不是,則不需要採取進一步的操作。

    3.1。在目標分支上查看歷史記錄,並查找從源到目標的最後一次完整合並(忽略任何櫻桃採摘合併,因爲這會導致大量誤報) - 請記錄變更集編號。更簡單的替代方法是從源分支到目標分支執行合併,以將源分支的最新版本獲取到目標分支中。

    3.2。右鍵單擊源代碼管理資源管理器中的源代碼分支,然後從上下文菜單中選擇比較。如果在步驟2.1中將源分支合併到目標分支中,請僅採用源代碼的最新版本。否則,從Source Version |選擇Changeset鍵入組合框,然後從步驟2.1輸入變更集編號。

    3.3。使用目標路徑字段旁邊的瀏覽按鈕上的下拉箭頭來選擇服務器路徑。然後在打開的對話框中選擇目標分支。

enter image description here

3.4。在比較對話框中單擊確定以執行比較。

  1. 執行從源分支到目標分支的合併並傳遞強制選項。這將忽略合併歷史記錄併合並變更集,即使它們已經在過去合併過。

tf merge $/source $/target /recursive /force /version:T

注: T版規範指示的最新版本。

  1. 關閉合並衝突對話框。

  2. 通過選擇源分支自動解決所有衝突。

tf resolve $/target /recursive -auto:TakeTheirs

  • 在檢查。

  • 確認不再有從目標爲合併任何候選人源和有兩個分支之間沒有區別(這次只是使用最新版本,因爲我們在步驟4中強制合併了最新版本)。

  • 請參見MSDN上的TF mergeresolve命令的詳細信息。