2017-04-11 28 views
0

我有兩個分支A和B.我想合併A和B.我錯誤地運行了git fetch命令。我想撤消它。有沒有這樣的命令?在合併分支時撤銷提取命令

+1

沒有必要撤消任何'git的fetch',因爲這從不影響任何*你*的工作,它不僅帶來從*別人犯*。 – torek

+0

爲什麼你認爲你需要撤消抓取?你想解決哪個問題? –

+0

你的兩個分支之一是'A'還是'B'是遠程分支? – LeGEC

回答

0

「撤消」一個git獲取是困難的,但永遠不會有任何理由需要撤銷git獲取。請記住,git fetch的作用是調用遠程服務器,獲取SHA-1映射的分支名稱列表,引入您需要的提交和其他對象以將其存儲在存儲庫中,然後更新您的遠程跟蹤分支,以便它們指向遠程目前的分支提示(截至您剛剛打電話給它時)。這對你的任何工作樹文件都沒有影響,如果你明天再次運行git fetch,今天完成的任何工作都可以在明天跳過。如果你設法撤銷抓取,明天運行的那個將不得不重新開始今天完成的工作,所以這是一個淨損失:你只是花了一些努力,讓你的git將不得不通過網絡帶來更多的代碼。

這就是說,腳註的時間。 :-)

1如果您有遠程reflog(您可能會這樣做),這並不難:只需使用遠程reflog即可查找最近一次獲取中更新的遠程跟蹤分支 - 這些信息可能仍然可用FETCH_HEAD文件 - 然後使用git update-ref將這些引用指向它們以前的reflog條目。但是這仍然會將提取的對象留在您的存儲庫中,因此爲了清除它們,您還必須刪除中間reflog條目,然後運行git gc --prune = now,這需要非常小心,並且會放棄所有未引用的對象,而不僅僅是最近獲取的引用。

2我認爲有人可能會認爲「磁盤空間不足」可能是導致這種情況的一個原因,特別是如果大型對象意外地被推送到遠程並且將在下一次獲取時從遠程移除。儘管如此,在一個空間不足的文件系統中工作是非常棘手的,而且我不確定除了將整個存儲庫移到其他地方(沒有磁盤空間問題的地方)之外,我都不想做這麼多事情。

How to undo 'git fetch'