2010-10-26 168 views
247

我剛剛用git branch -D branchName刪除了我需要的一些實驗性更改的錯誤分支。Git撤消本地分支刪除

如何恢復分支?

+2

很高興知道我不是唯一的lame- o誰做了這件事(並且忘了定期推送到遠程副本) – Ray 2017-08-24 11:48:46

+0

現在讓我們3人 – 2018-01-12 11:14:05

回答

504

您可以使用git reflog來查找分支上次提交的SHA1。從這一點來說,你可以重新使用

git branch branchName <sha1> 

編輯一個分支:作爲@seagullJS說,該branch -D命令告訴你SHA1,因此,如果您還沒有關閉終端尚未成爲真正的輕鬆。例如,這將刪除,然後立即恢復名爲master2分支:

[email protected] /C/MyRepo (master) 
$ git branch -D master2 
Deleted branch master2 (was 130d7ba). <-- This is the SHA1 we need to restore it! 

[email protected] /C/MyRepo (master) 
$ git branch master2 130d7ba 
+52

Git告訴你什麼是分支被刪除時的SHA1,所以如果你只是刪除它,它可能只是命令行中的幾行。 – seagullJS 2012-12-13 01:04:25

+1

謝謝,這節省了我的工作時間!僅供參考使用git reflog獲得 albertski 2015-01-15 02:12:26

+0

非常感謝,我找到了我的「丟失」文件! – inix 2016-06-02 16:18:34

34

如果你知道該分支的最後SHA1,你可以嘗試

git branch branchName <SHA1> 

您可以使用git reflog的SHA1,在溶液here描述。

+1

我如何找到sha1? – 2010-10-26 16:57:59

+1

我已經更新了關於如何找到SHA1的答案。 – Chetan 2010-10-26 16:59:25

+0

非常感謝! – 2017-08-09 12:41:33

2

第一:備份您的整個目錄,包括.git目錄。

第二:您可以使用git fsck --lost-found來獲取丟失的提交的ID。

第三:rebase或合併到丟失的提交。

四:凡事三思而後使用-D之前或與GIT :)

你也可以如何從這種錯誤中恢復read this good discussion --force。

編輯:順便說一句,不要運行git gc(或允許它自己運行 - 即不運行git fetch或任何類似的東西),否則你可能永遠失去你的提交。

+1

1和4是IMO的過度殺傷力。 – jwg 2013-03-21 11:07:21

+0

是的,這就是爲什麼我們使用git,以避免必須攜帶所有這些。您所犯下的每一項行爲仍然適用於您。 – mateor 2013-05-03 05:26:04

18

如果你還沒有推刪除的是,你可以簡單地做:

$ git checkout deletedBranchName 
+0

這個答案讓Git Extensions閉嘴:「你試圖推送的分支似乎是這個遠程的一個新分支。」非常感謝。 – Omer 2014-12-21 08:56:13

10

如果您剛剛刪除的分支,你會看到這樣的事情在你的終端:

Deleted branch branch_name(was e562d13) 
  • 其中e562d13是一個唯一的ID(又名「SHA」或「散列」),用此可以恢復已刪除的分支。

要恢復分支,使用:

git checkout -b <branch_name> <sha> 

例如

git checkout -b branch_name e562d13 
3

謝謝,這個工作。

的Git分支new_branch_name sha1

git的結帳new_branch_name

//可以看到我的老文件中檢查了我的老枝