2012-01-20 127 views
52

我已經開始在一個項目上工作,並且我提出了一些不必要的提交,這些提交是我推送給原始主機的。現在,當我嘗試執行pull請求時,Github想要提交所有以前的提交。Git從合併請求中刪除不需要的提交

我的問題是,我如何刪除不需要的提交併提交我想提交的更改,以便與主服務器保持最新?

+0

查找「git rebase」。你可以壓縮一起提交,並留下一些提交。 –

回答

34

我假設你的來源是你自己想要做拉請求的項目的分叉點?

既然你會改變歷史(通過重新設置頭),你將需要推--force標誌。使用git log找到最後一次良好提交的散列。

現在運行

git reset SHA 

這將你的頭更改爲SHA和保存文件的變化,因爲去年良好的承諾,你的指數也將被重置。

現在您可以更改您的代碼並執行您想要的提交。但是,由於您更改了存儲庫的歷史記錄,因此您必須執行git push --force。這意味着任何分叉您的存儲庫的人將無法再從您那裏獲得更改。但是你可以向上遊做拉請求。

+0

如果有人在我的拉動請求所基於的分支上分叉時,強制推動只是一個問題?或者,如果他們從我的存儲庫中完成任何分支?如果他們刪除違規分支,他們可以再次與我的存儲庫同步?有沒有辦法在沒有強制推送的情況下乾淨地從拉取請求中移除提交? – endolith

+1

@endolith僅當它們在您的分支上進行提交時纔有效。任何後來重新提交的提交後代的提交都將受到影響,因爲原始提交不再存在,所以不能進行簡單合併。只要沒有人合併或基於您的拉動要求承諾,直到您完成的力量推動您的自由更改您的拉動請求,強制推送到您的分支,如果你願意。如果您在拉取請求中明確說明您正在積極改變它,則不會發生這種情況。 –

+0

拉取請求必須打開才能使分支的更改生效 –

0

如果你使用git gui,轉到git gui並想象你的分支歷史。 (在執行下一步之前,備份您想要推送的本地更改) 右鍵單擊分支想要重置爲主的點,然後單擊重置。 重置之後,在命令行中鍵入git push -f 現在在分支中進行必要的更改,再次提交n。 如果您現在創建一個拉取請求,它將在分支重置後只有新的提交。