2015-06-16 33 views
0

我有一個分支,其中我意外合併其他人的更改很久以前,現在有數百個文件顯示在不是我的請求上。櫻桃採摘更改爲來自一系列提交中的特定文件

我想創建一個單獨的分支,我想在這幾十個提交中選擇對自己的文件進行修改,以便我的新的請求只包含我的更改。

我發現如何櫻桃挑選提交,以及如何從一個特定的提交櫻桃挑選文件,但我如何從一系列提交挑選幾個文件

有沒有更簡單的解決方案?

回答

0

如果您曾經合併過一次,您可以避免,然後使用git rebase跳過合併提交。

-----origin/foo-------A----------------------------B----C----D 
         (where you merged in)  (commits on top of that) 

    AFTER REBASE 

-----origin/foo-------B'----C'----D' 
         (your commits, skipping A) 

相反,如果所做的更改(BCD以上)實際接觸你想避免文件,你需要使用git filter-branch重寫這些提交併避免更改這些文件。使用--tree-filter命令,可以重置每個不想觸摸的樹的部分。

1

所以,如果我正確地理解你,你想要做的第一件事是櫻桃挑選的範圍,即git cherry-pick --no-commit。然後,用git reset刪除對您的索引的更改。然後git add要提交的所有文件,git commit這些文件,最後是git checkout .以擺脫其他本地更改。這將導致包含您的更改的單個扁平化提交。

現在,如果不是你想要做的是隻包括那些觸及特定的一組文件的提交,你可能想看看朝着this page使用git rev-list養活列表底部給出的例子所有已提交到cherry-pick的提交文件。因此,例如,如果您的所有文件都在mydir之內,就像git rev-list --reverse master -- mydir | git cherry-pick --stdin應該這樣做。