2013-07-07 29 views
0

我正在使用自己的獨立分支(在單獨的分支中)處理項目。隨着時間的推移,我已經完成了大量的提交。我想推動上游的改變(拉請求),但是我有很多提交在我開發時變得無關緊要。所以說我有歷史像從不再相關的提交中清除git分支

A - B (upstream/master) 
    \ 
     C - D - E - E1 
       \ 
       1 - 2 -- 3 - 4 (local) 
        \/
         Z 

現在我想打一個拉請求從4B。文件中不再存在諸如D的許多提交,並且上游不需要知道。考慮A - B - C,其中A處的文件內容與C相同。當從C發出拉請求時,我想先清理分支,使其看起來像B從未發生過。

我該怎麼做?

請不要評論'你應該保留你的整個歷史,它顯示你的想法& c'。我主要是出於興趣而問。

+1

http://git-scm.com/book/en/Git-Tools-Rewriting-History –

+0

只是爲了澄清,你問如何申請只提交'd - 電子 - 1 - 2 - 3 - 4'在'B'上面? – coudy

+0

在這個例子中,是的。但是,'1 - 2'不再影響任何進一步的提交:也就是說,當我們處於'4'時,'1 - 2'中任何改變的東西都不再存在,例如'3 '是一個恢復提交。理想情況下,我只想讓'1 - 2'消失。 –

回答

2

git rebase -i origin/master將重播在當前origin/master的頂端的分支歷史,你可以fixup/squash您提交或刪除它們完全(你只是刪除提交線時,編輯器會彈出)。只要看到rebase期間的指示。

或者,您可以reset --hard origin/master將您的分支置於與origin/master相同的狀態,然後是cherry-pick提交您想要的。順便說一下,當我在分岔上工作時,我通常會添加官方回購:$ git add remote official https://github.com/rails/rails.git,當我想提交拉取請求時,我會對其進行重設:$ git fetch official$ git rebase official/master

+0

'origin/master'不太正確,原始的海報想要向'upstream/master'發出pull請求。由於他使用的是GitHub,「origin/master」可能指的是他自己的遠程分支,而不是他所分離的遠程上游回購。 – 2013-07-08 00:11:03

+0

我最終做了一個交互式底座,並且壓縮了很多提交,如果不相關的話,這些提交就會消失。 蛋糕,它可以工作,如果你沒有對自己的主人承諾;) –