我有一個分支,其中我意外合併其他人的更改很久以前,現在有數百個文件顯示在不是我的請求上。櫻桃採摘更改爲來自一系列提交中的特定文件
我想創建一個單獨的分支,我想在這幾十個提交中選擇對自己的文件進行修改,以便我的新的請求只包含我的更改。
我發現如何櫻桃挑選提交,以及如何從一個特定的提交櫻桃挑選文件,但我如何從一系列提交挑選幾個文件?
有沒有更簡單的解決方案?
我有一個分支,其中我意外合併其他人的更改很久以前,現在有數百個文件顯示在不是我的請求上。櫻桃採摘更改爲來自一系列提交中的特定文件
我想創建一個單獨的分支,我想在這幾十個提交中選擇對自己的文件進行修改,以便我的新的請求只包含我的更改。
我發現如何櫻桃挑選提交,以及如何從一個特定的提交櫻桃挑選文件,但我如何從一系列提交挑選幾個文件?
有沒有更簡單的解決方案?
如果您曾經合併過一次,您可以避免,然後使用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)
相反,如果所做的更改(B
,C
和D
以上)實際接觸你想避免文件,你需要使用git filter-branch
重寫這些提交併避免更改這些文件。使用--tree-filter
命令,可以重置每個不想觸摸的樹的部分。
所以,如果我正確地理解你,你想要做的第一件事是櫻桃挑選的範圍,即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
應該這樣做。