清理叉子並從上游從新啓動它

我已經分叉了一個存儲庫,而後我作了一些更改,看起來我搞砸了全部東西。 git

我但願從頭開始,使用當前的上游/主人做爲我工做的基礎。
我應該改裝個人存儲庫仍是刪除它? github


#1樓

愛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


#2樓

關注@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

關於失去你的改變的其餘答案仍然適用,是好的。


#3樓

如何經過Sourcetree GUI 100%完成

(不是每一個人都喜歡經過git命令行界面作事)

設置完成後,您只須要執行步驟7-13。

Fetch> checkout master branch> reset to master>將更改推送到服務器

腳步

  1. 在屏幕頂部的菜單工具欄中:「存儲庫」>「存儲庫設置」

頂部菜單欄中突出顯示「存儲庫」

  1. 「加」

對話框底部的「添加」按鈕

  1. 返回GitHub並複製克隆URL。

Github網站上的「克隆或下載」按鈕後跟git網址

  1. 將網址粘貼到「網址/路徑」字段中,而後爲其指定一個有意義的名稱。 我把它稱爲「主人」。 不要選中「默認遠程」複選框 。 您將沒法直接推送到此存儲庫。

「遠程詳細信息」對話框中突出顯示「遠程名稱」和「URL /路徑」字段

  1. 按「肯定」,您會看到它如今出如今您的存儲庫列表中。

「master」存儲庫已添加到「存儲庫設置」對話框中的存儲庫列表中

  1. 再次按「肯定」,您會看到它出如今「遙控器」列表中。

「主」庫在側欄的遙控器列表中突出顯示

  1. 單擊「獲取」按鈕(源樹標題區域的左上角)

標題區域中的「獲取」按鈕

  1. 確保選中「從全部遙控器中提取」複選框並按「肯定」

「獲取全部遙控器」複選框在「獲取」對話框中突出顯示

  1. 雙擊「master」分支,檢查它是否已經檢出。

  2. 找到要重置的提交,若是您調用repo「master」,則極可能但願在其上找到帶有「master / master」標記的提交。

其上帶有「master / master」標記的提交示例

  1. 右鍵單擊commit>「將當前分支重置爲此提交」。

  2. 在對話框中,將「使用模式:」字段設置爲「硬 - 丟棄全部工做副本更改」,而後按「肯定」(確保將您不想丟失的任何更改首先放在單獨的分支上)。

「使用模式」字段在「重置提交」對話框中突出顯示。它被設置爲「放棄全部工做副本更改」

  1. 單擊「推送」按鈕(源樹標題區域的左上角)將更改上載到您的倉庫副本。

標題區域中的「按下」按鈕

你作完了!


#4樓

最簡單的解決方案是(使用' 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。

相關文章
相關標籤/搜索