2017-08-17 113 views
2

修訂問題的說明:提前感謝!GIT中+ DIFF弧與修復的diff(是來自工作[主]!)

master分支工作時,我對一個文件進行了修改,並對arc diff --create'進行了修改。然後,我提出了另一個用戶故事,仍在master分支中工作,並再次爲arc diff --create編寫了一個差評以供審閱。兩個用戶故事,兩個差異可供審查。目前很好。

[我明白創建一個differential審查通過arc diff,就像製作pull request。 ]

這是問題所在......我再重新討論的第一個用戶故事,作進一步更改(在master分支仍在工作,並着手arc diff <commit_hash>~ --update <diff_id>。現在的差顯示最初創建的差異和變化之間它的更新,並沒有改變總體!

....

我已經告訴我應該改變以前都取得了新的分支。然後,修訂版的所有arc --update的會導致整體的差異(而不是最近兩次更新之間的差異)。

我也被告知,我仍然可以讓該新分支包含我所有的更改(我有arc diff版),並修復修訂。

我怎麼類型來創建一個新的分支包含所有的變化(即那些已經修訂「arc diff」 ED),恢復master分支(據說),並重新arc diff --update我的最新修訂版與我公司最新提交? ...(/或任何解決我的問題。)

回答

1

如果您創建一個新的工作分支你開始進行更改之前,這通常是自動工作。但是在它不(因爲弧想不通上游分支點)的情況下,也有命令行參數差異,允許你指定你的意圖:

  • --update REVISIONID - 更新特定修訂

例如,arc diff --update D1

要回去收拾了你的樹,通過創建一個新的分支,將舉行正在進行你目前的工作時間等,你可以隨時返回到它:

git checkout -b current_wip 

現在,刪除您的本地主服務器,並重新檢查主服務器在上游服務器上的狀態。這會在您做出任何更改之前將您帶回,但是由於您創建了current_wip分支,因此不會丟失任何東西(即使跳過創建分支,實際上也不會丟失提交,但它們會變得很難發現由於沒有被附加到分支)。擁有一個乾淨的主人也會在你以後的時候避免一些警告。

git branch -D master 
git checkout master 

現在,您可以重新創建兩個原始的補丁,但在單獨的分支這個時候。 arc patch可用於從差分中提取補丁,並自動爲您創建一個名稱爲arcpatch-D1(其中D1是diff ID)的分支。在這裏,我將它們稱爲D1和D2,但是您將使用在提交它們時擴散分配給差異的實際標識符。

arc patch D1 
git checkout master 
arc patch D2 

現在,您只需進行最後一次更改,您希望將其應用於D1之上。

git log current_wip 

記下提交ID的前幾位數。對於少於幾千次提交的存儲庫,您可能只需要前5位數字。即使像Linux內核這樣的大型存儲庫通常也會在前7位數字中唯一標識提交。下面,我將它稱爲1234abc,但您將使用實際的提交ID。

接下來,您將返回到您所做的第一個補丁的分支,並在其上面挑選該提交。櫻桃挑選只需要那個特定的提交,而不是合併,這會在兩者之間丟失任何東西。採摘櫻桃之後,如果你沒有發生衝突,你就可以更新差異了。

git checkout arcpatch-D1 
git cherry-pick 1234abc 
arc diff 

一旦你感到高興的是一切都在安全的差分(或者也許你想等到你arc land兩個補丁),你可以刪除你作爲一個備份current_wip分支。

git branch -D current_wip