2011-07-20 22 views
20

我有一個主分支這樣的..從分支中刪除舊的Git提交而不使用反向修補程序?

A -- B -- C -- D -- E -- HEAD 

有沒有刪除舊的一個承諾,並保留其他任何命令,說犯C 2

最後卻變成這樣

A -- B -- D -- E -- HEAD 

我知道,我們可以使用反向補丁和應用具有反向補丁一個新的承諾刪除提交C,但樹結構不會那麼清晰,看起來笨重,即

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD 

任何人都知道嗎?

回答

28

使用交互式底座。例如,返回5次提交:

git rebase -i HEAD~5 

然後在彈出的編輯器中,刪除包含要移除的提交的行。

+7

如果您已將此推送到其他地方,請不要這樣做。 – manojlds

+5

有一個習慣性的例外,你可以肯定你是唯一一個使用你推送的遠程設備。 –

+4

根據慣例補充說明,如果你通知所有其他開發者,並且他們能夠在他們的最終解決它也是可能的 –

4

互動變基工作,但只用一個命令做到這一點:

git rebase --onto B C 

仍然可以看到在「互動變基」的答案的評論。他們也適用於此。