2013-05-03 58 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 

現在,您處於與您分叉時的位置。現在您可以再次從原始回購中獲取最新代碼。