2012-03-02 41 views
16

我推送了某人的項目並提交了一些提交。我填寫了一個拉取請求,但沒有被接受(要麼改變是不可取的,要麼是作者改寫功能以符合「他的風格」)。現在我堅持我的本地fork有一些額外的提交,永遠不會進入上游。我可以退出變更集,但後來我有額外的兩次提交,並且必須永遠推送它們。這只是醜陋的!放棄Git針對拒絕的拉取請求在Github上提交

什麼是放棄這些沒人願意的提交併讓我的分支返回上游的最佳方式?我知道我可以完全刪除叉子並將其重新分叉,但是這真的很笨拙,我會失去我正在做的其他工作。

+0

你是否有機會在單獨的(分叉)分支中進行_proposed_修改? – 2012-03-02 18:18:46

回答

19

您可以將您的repo狀態重置爲先前的提交。首先弄清楚你想你的回購復位到其呈交:

git log 

要將回購恢復到這種狀態:

git reset --hard <commit_hash> 

如果你有一個分叉遠程回購,你可以把這些更改回它:

git push -f <remote> <branch> 

雖然你可能想改變你的工作流程,以使事情變得更容易。

當我分叉回購並自行修改時,我首先設置了兩個遙控器。一個遙控器會指向我的分叉回購(例如:origin),並將另一個遙控點添加到原始從(如:original_repo)分叉的回購。所以我可能是這樣的:

$ git remote 
    origin 
    original_repo 

我創建了一個分公司做我的,當然所有的工作:feature。當提出拉取請求時,我從feature分支到original_repomaster分支。如果拉請求被拒絕,就像你的例子,你可以放棄這個分支。如果你想進行更多的修改,只需從master創建另一個分支並使用它來工作。

我也不會提交或合併任何本地更改到master分支。我只使用master分支與original_repomaster分支同步。例如:

git checkout master 
    git fetch original_repo 
    git merge original_repo/master 

這保證了master分支總是同步的了原來回購的master分支。例如,如果拉取請求被接受並且合併,當提取和合併發生時,本地master也將具有在原始回購中使用的所有「批准」代碼。

基本上使用master與原始倉庫的master同步,並且當您想要進行編輯時始終從主倉庫分支。將這些分支用於您的拉動請求以回到原始回購。

2

返回你的主分支幾步(假設你想跳過三次提交),並用-f來重寫你的github回購。

git reset --hard HEAD~3 
git push -f origin master