2014-08-31 189 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