我已經分叉了一個存儲庫,而後我作了一些更改,看起來我搞砸了全部東西。 git
我但願從頭開始,使用當前的上游/主人做爲我工做的基礎。
我應該改裝個人存儲庫仍是刪除它? github
愛VonC的回答。 這是初學者的簡單版本。 服務器
有一個git遙控器叫作origin
,我相信大家都知道。 基本上,您能夠根據須要爲git repo添加任意數量的遙控器。 因此,咱們能作的是引入一個新的遙控器,它是原始的回購而不是前叉。 我喜歡稱之爲original
工具
讓咱們將原始回購添加到咱們的fork做爲遠程。 fetch
git remote add original https://git-repo/original/original.git
如今讓咱們獲取原始倉庫以確保咱們擁有最新的編碼 網站
git fetch original
正如VonC建議的那樣,確保咱們是主人。 編碼
git checkout master
如今,爲了讓咱們的叉子快速使用原始倉庫的最新代碼,咱們所要作的就是根據原始遙控器硬重置咱們的主分支。 url
git reset --hard original/master
你完成了:) spa
關注@VonC很棒的答案。 您的GitHub公司政策可能不容許對主人進行「強制推送」。 命令行
remote: error: GH003: Sorry, force-pushing to master is not allowed.
若是您收到相似這樣的錯誤消息,請嘗試如下步驟。
要有效地重置fork,您須要按照如下步驟操做:
git checkout master git reset --hard upstream/master git checkout -b tmp_master git push origin
在GitHub上打開你的分支,在「設置 - >分支 - >默認分支」中選擇「new_master」做爲新的默認分支。 如今你能夠強制推送'master'分支:
git checkout master git push --force origin
而後,您必須將'master'設置爲GitHub設置中的默認分支。 要刪除'tmp_master':
git push origin --delete tmp_master git branch -D tmp_master
關於失去你的改變的其餘答案仍然適用,是好的。
(不是每一個人都喜歡經過git命令行界面作事)
設置完成後,您只須要執行步驟7-13。
Fetch> checkout master branch> reset to master>將更改推送到服務器
雙擊「master」分支,檢查它是否已經檢出。
找到要重置的提交,若是您調用repo「master」,則極可能但願在其上找到帶有「master / master」標記的提交。
右鍵單擊commit>「將當前分支重置爲此提交」。
在對話框中,將「使用模式:」字段設置爲「硬 - 丟棄全部工做副本更改」,而後按「肯定」(確保將您不想丟失的任何更改首先放在單獨的分支上)。
你作完了!
最簡單的解決方案是(使用' upstream
'做爲引用原始repo分叉的遠程名稱):
git remote add upstream /url/to/original/repo git fetch upstream git checkout master git reset --hard upstream/master git push origin master --force
(相似於這個GitHub頁面,「若是我處境很差,該怎麼辦?」 )
請注意,您可能會丟失在master
分支上執行的更改 (在本地,由於reset --hard
,而在遠程端,由於push --force
)。
若是您但願保留對master
的提交,則能夠選擇在當前upstream/master
之上重放這些提交。
用git rebase upstream/master
替換重置部分。 而後你仍然須要強制推進。
另請參閱「 若是狀況很差,我該怎麼辦? 」
一個更完整的解決方案,備份您當前的工做(以防萬一)在「 清理git master分支並將一些提交移動到新分支 」中詳細說明。
另請參閱「將新的更新從原始GitHub存儲庫拉入分叉的GitHub存儲庫 」,以說明「 upstream
」是什麼。
注意:最近的GitHub repos確實保護master
分支不受push --force
。
所以,您必須首先取消保護master
(見下圖),而後在強制推進後從新保護它 。
注意:特別是在GitHub上, 如今(2019年2月)有一條快捷方式能夠刪除已經合併到上游的pull請求的分叉repos。