考慮以下unpushed提交:刪除先前的承諾,而觸摸文件
97874cd commit 5
13bc8cf commit 4
60c37d4 commit 3
0c29771 commit 2
6db9ba4 commit 1
如何刪除承諾3不接觸的所有的文件,並保持提交4,5完好?
考慮以下unpushed提交:刪除先前的承諾,而觸摸文件
97874cd commit 5
13bc8cf commit 4
60c37d4 commit 3
0c29771 commit 2
6db9ba4 commit 1
如何刪除承諾3不接觸的所有的文件,並保持提交4,5完好?
一種方法是:
git checkout -B new_branch
git reset --hard 0c29771
git cherry-pick 13bc8cf
git cherry-pick 97874cd
git checkout master
git reset new_branch
這將導致在相同的狀態之前,任何的這些文件,但變化承諾3將未提交的(假設這一切都沒有任何衝突)。
這實際上是一個手動轉換,如果你不熟悉rebasing,這是一個很好的竅門:) –
@ WillemD'haeseleer,如果我記得沒錯的話,squash會將commit3的變化添加到它旁邊的任何提交。我對OP想要什麼的理解是,他希望提交3的變更變爲未提交,而提交4和提交5在提交1和提交2後提交。 – Ishamael
@Ishamael您的聲明對於我想要的是正確的。 – user2094178
您是否打算保留提交3的更改,但是它是否會從您的歷史記錄中消失?那麼你應該做一個互動的底墊中,像這樣:
git rebase -i HEAD~4
,然後標記60c37d4是smashed
或fixed
底墊中。
如果您還想刪除commit3的更改,請刪除交互式rebase中的相應行。完成後的另一種方式是
git rebase --onto HEAD~3 HEAD~2 HEAD
做一個互動的底墊和壁球第三提交 –
@ WillemD'haeseleer我就是害怕。 – user2094178