2010-07-20 54 views
14

假設我有很久以前的修訂版A,並做了一個理想的改變。有了Git,是否有可能重新應用祖先修訂?

然後,後來,我有這讓很多的變化,以大量的文件,其中包括消滅變化A.

現在B版本,很久以後,我要重新申請修訂A.是否有一個好辦法做到這一點?合併和櫻桃挑選命令似乎跳過作爲祖先的修訂,並且我沒有看到任何標誌忽略祖先。

總有差異/適用,但那些真的是最好的方式?看起來這可能是「有損」(通過中間補丁格式),可能不允許git正常使用所有工具......但這是我不知情的預感。

+2

'git | git | 名詞英國人,非正式的 不愉快或可鄙的人。「# 這意味着:一切都可能與混帳。 – 2010-07-20 23:14:47

回答

-2

您可以使用git checkout $ REVISION切換回您的修訂(提交)。那麼你應該從那裏創建一個新的分支。

git.cmd branch YOURCOMMIT 

您可以使用鎬來獲取您的新分支所需的提交。

+0

我不明白。我不想要一個新的分支;我想在同一分支內重新應用過去的修訂。 – mackstann 2010-07-20 23:35:03

+0

我明白了。但用新分支做這件事更容易。您可以安全地刪除它 - 一旦您的鎬過程完成並且您已將其合併回來。分支在git中便宜且容易。 – 2010-07-20 23:39:46

+0

但是,當我在回到過去的分支中時,我將來如何在將來修改版主? – mackstann 2010-07-20 23:42:46

23

git cherry-pick A會做你想要的。它沒有看祖先 - 它只是看看已經應用了哪些變化。

下面是一個例子:

git cherry-pick A 
git cherry-pick A 
git cherry-pick A 

只會造成一個新的提交(最多)。第二個和第三個命令是空操作,因爲已經應用了A的更改。但是,

git cherry-pick A 
git cherry-pick B 
git cherry-pick A 
git cherry-pick B 

將創建四個新的提交。第一和第三的提交都將做同樣的事情,而第二個和第四個將恢復第一和第三(即使提交B做出其他改變比恢復A)。換句話說,這是一樣的

git cherry-pick A 
git revert --no-edit HEAD 
git revert --no-edit HEAD 
git revert --no-edit HEAD 

希望這有助於。

相關問題