2015-05-01 24 views
1

考慮以下unpushed提交:刪除先前的承諾,而觸摸文件

97874cd commit 5 
13bc8cf commit 4 
60c37d4 commit 3 
0c29771 commit 2 
6db9ba4 commit 1 

如何刪除承諾3不接觸的所有的文件,並保持提交4,5完好?

+0

做一個互動的底墊和壁球第三提交 –

+0

@ WillemD'haeseleer我就是害怕。 – user2094178

回答

1

一種方法是:

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將未提交的(假設這一切都沒有任何衝突)。

+0

這實際上是一個手動轉換,如果你不熟悉rebasing,這是一個很好的竅門:) –

+0

@ WillemD'haeseleer,如果我記得沒錯的話,squash會將commit3的變化添加到它旁邊的任何提交。我對OP想要什麼的理解是,他希望提交3的變更變爲未提交,而提交4和提交5在提交1和提交2後提交。 – Ishamael

+0

@Ishamael您的聲明對於我想要的是正確的。 – user2094178

2

您是否打算保留提交3的更改,但是它是否會從您的歷史記錄中消失?那麼你應該做一個互動的底墊中,像這樣:

git rebase -i HEAD~4 

,然後標記60c37d4是smashedfixed底墊中。

如果您還想刪除commit3的更改,請刪除交互式rebase中的相​​應行。完成後的另一種方式是

git rebase --onto HEAD~3 HEAD~2 HEAD