2013-05-03 55 views
11

我在GitHub上分叉回购并提交了一个pull请求。该项目的维护人员拒绝了拉取请求,但我们在论坛中找到了更好的解决方案。他们指示我用另外的变化创建另一个拉取请求。但是,我在GitHub上存储库的分支现在已经过时了,因为我分叉后更新已经推到了主仓库。此外,GitHub上的存储库有一个额外的提交(我的拉取请求提交),不应该在那里,因为它不被接受为项目的一部分。如何在pull请求被拒绝时更新GitHub分叉的回购?

我发现这个问题:How do I update a GitHub forked repository?

我跟着指示,特别是,我这样做:

git remote add upstream git://github.com/fuel/core 
git fetch upstream 

这导致:

remote: Counting objects: 93, done. 
remote: Compressing objects: 100% (47/47), done. 
remote: Total 69 (delta 49), reused 40 (delta 20) 
Unpacking objects: 100% (69/69), done. 
From git://github.com/fuel/core 
* [new branch]  1.0/master -> upstream/1.0/master 
* [new branch]  1.1/master -> upstream/1.1/master 
* [new branch]  1.2/develop -> upstream/1.2/develop 
* [new branch]  1.2/master -> upstream/1.2/master 
* [new branch]  1.3/develop -> upstream/1.3/develop 
* [new branch]  1.3/master -> upstream/1.3/master 
* [new branch]  1.4/develop -> upstream/1.4/develop 
* [new branch]  1.4/master -> upstream/1.4/master 
* [new branch]  1.5/develop -> upstream/1.5/develop 
* [new branch]  1.5/master -> upstream/1.5/master 
* [new branch]  1.6/develop -> upstream/1.6/develop 
* [new branch]  feature/better-hmvc -> upstream/feature/better-hmvc 

好了,似乎所有的精好的。我确信我是在正确的分支上:

git checkout 1.6/develop 
Already on '1.6/develop' 

单词。好吧,现在这个:

git rebase upstream/1.6/develop 
First, rewinding head to replay your work on top of it... 
Applying: prevent invalid XML node names 

等等......什么?为什么要“防止无效的XML节点名称”被应用?这是项目维护人员拒绝的拉取请求。我显然错过了“rebase”的真正意义。现在,如果我git status它说:

# On branch 1.6/develop 
nothing to commit (working directory clean) 

当我git log,我可以看到我的问题的一半已经解决。自从我分叉以来,已经将这些更改引入到项目中,现在反映在我的git log中。但是,最近的提交仍然是“防止无效的XML节点名称”。我如何消除它?

我尝试检查出的最后提交所做项目:

git checkout 5f31a4df55e5b6ca1b2092534063a1fce4a32181 

然而,这让我在一个分离的头状态。它说我可以环顾四周,进行修改并提交。我不认为这就是我想要做的。我想我希望HEAD指向提交5f31a4df55e5b6ca1b2092534063a1fce4a32181。我下一步要做什么?

回答

9

git rebase将保持你的分支提交。由于您的公关被拒绝,您希望将其删除并使您的master分支与upstream/master相同。

因此,您想要reset

git checkout master 
git reset --hard upstream/master 

然后你将拥有与上游完全相同的主人。然后,为您的新公关创建一个新分支,这样您就不会再遇到这个问题。

+2

谢谢!我想重复一遍,因为它对我很有帮助:**“然后,为您的新公关创建一个新分支,这样您就不会再遇到这个问题。”** – 2013-06-19 20:47:51

+0

这似乎是一个更精确一点:http://stackoverflow.com/a/8135023/89818推动是我必要的。 – caw 2014-02-23 06:38:33

1

由于这个问题有一个已经接受的答案,但我会告诉你另一种方式,因为接受的答案在我的情况下并不顺利。

执行

$git rebase  
There is no tracking information.... 

$git checkout 
Already on 'master' 

$git reset --hard upstream/master 
ambiguous argument upstream/master 

如果这种情况出现,那么请执行这些步骤。

本地复位HEAD。

$git reset HEAD 

对服务器回购进行相同的更改。

$git reset HEAD^ 

然后,它会显示约你到你的原来的叉式回购取得,列出所有文件的更改消息。Unstaged随文件名更改。

$git stash 

现在你可以强制推动这些变化断绝对同一HEAD指向本地和远程回购:

现在使用撤消更改。

$git push origin +HEAD 

现在,您处于与您分叉时的位置。现在您可以再次从原始回购中获取最新代码。