2014-08-31 235 views
3

在開源項目上工作時,我遇到了以下git問題。我做了一些改變,併發送了拉請求。公關首先被接受。但是,我的更改發現有一些微妙的錯誤,維護者再次提交了我的提交,並要求我在解決問題後發送新的請求。但是,之間發生了很多其他提交,所以我需要更新我的請求。不幸的是,我不能讓git在最近的狀態master之上重新綁定或挑選舊的PR。git rebase after git恢復

讓我用一個例子來說明事情。說,我原來的拉動請求已提交AB並被接受。然後,幾次提交後我的公關被還原(R),然後再發生幾次提交。歷史是這樣的:

...--A---B--...--R--...--o master 

現在,我想將它轉化爲以下形式,以精益求精最近的master狀態的頂我拉請求:

...--A---B--...--R--...--o master 
          \ 
          A---B newPR 

但是,我無法通過rebasecherry-pick實現此目的。問題似乎是,git認爲AB已經是master的一部分,因爲它們已經在歷史中了。因此,它不會將這些更改應用於master之上。

我該如何強制git來做到這一點?

+1

你究竟是什麼意思*我未能實現這個*?你從Git得到一個特定的消息嗎?另外,添加你使用的確切的'rebase'和'cherry-pick'命令。 – Jubobs 2014-08-31 17:50:01

+0

@Jubobs *失敗*表示「A」和「B」的更改不存在。就git而言,這不是一個錯誤。 rebase命令是'git rebase - master masterPR B',其中'beforePR'是'A'之前的最後一次提交。這直接來自'git rebase'手冊頁。櫻桃採摘是'git cherry-pick A..B'。 – Lemming 2014-08-31 18:09:51

+3

有人在這裏評論,只是*恢復恢復*。這實際上工作得很好。不幸的是,我不記得用戶名,但是如果那個人會將其作爲答案發布,並且沒有什麼奇妙的更好的話,那麼我會很樂意接受它。 – Lemming 2014-08-31 18:23:13

回答

0

編輯

git checkout master 
git checkout -b redo 
git cherry-pick Aref 
git cherry-pick Bref 
... do fixes and commits 
git merge master 

之前

* e6a314b66d8be8a85abd6becd53e0d2c7a6332a5 E 
* d7d91af4225d5ba7d783303e73bcac1b5ba02a91 B 
* 381b95bea7f87662f72a1da67bd70cdfc497be47 A 
* e553928d35646512f640b0f0ca208f6729884993 D 
* 5157867afdbdcf4300f7b722e3816e294e0f2ae4 C 
* caa01fd5378f87b67811212aa4325963fab72905 Revert "A" 
* 8603f6b1231dbefa4911699cb59fa81f1a20e432 Revert "B" 
* d4c38c2c63ab0b4be00480bf9c9542ffc66dcb5f B 
* f2f6e0a0b7a804a4a8075839d7b73b37b747a7b3 A 
* 59597e64b49b234b45a94a86d950f0811a19cdfe root commit 

* e553928d35646512f640b0f0ca208f6729884993 D 
* 5157867afdbdcf4300f7b722e3816e294e0f2ae4 C 
* caa01fd5378f87b67811212aa4325963fab72905 Revert "A" 
* 8603f6b1231dbefa4911699cb59fa81f1a20e432 Revert "B" 
* d4c38c2c63ab0b4be00480bf9c9542ffc66dcb5f B 
* f2f6e0a0b7a804a4a8075839d7b73b37b747a7b3 A 
* 59597e64b49b234b45a94a86d950f0811a19cdfe root commit 

後對我的作品在當地

$ git checkout master 
Switched to branch 'master' 
$ ls 
A B C D E 
+1

我同意這種方法,如果它包含在一臺機器上。不幸的是,這將會破壞'master'的歷史。而且因爲'master'是一個很大的禁忌的公共分支。 – Lemming 2014-08-31 18:21:19