簡體   English   中英

如何在 Git 中恢復已刪除的分支?

[英]How do I get the deleted-branch back in Git?

我正在嘗試使用 Git 進行我們的軟件開發。 我發現如果我在 Git 中刪除一個分支,我可能會永遠丟失我的代碼。 這讓我很驚訝。 我認為作為一個版本控制系統,它應該能夠讓我做任何事情(甚至是愚蠢的)而不必擔心損害我的工作。

下面的步驟是我所做的:

  1. 初始化 Git 存儲庫。
  2. 向存儲庫提交一些更改。
  3. 切換/檢出當前工作目錄以首次提交。
  4. 刪除主分支。
  5. 然后我失去了所有的工作,我無法相信我所看到的。 這是真的嗎? 如果我在編碼時喝醉了。 我可能會丟失 Git 中的代碼。

問題是如何回滾刪除分支的動作?

或者,我怎樣才能在 Git 中獲取所有歷史記錄,甚至是在日志中消失的東西?

為了首先避免這個問題, Jefromi在評論中提出建議:

另一個提示:只使用git branch -d ,而不是git branch -D
如果您要刪除可能導致您失去工作的內容,您會收到警告,然后您可以在使用-D之前花點時間思考。
(或者,您可以從gitk刪除,以便您真正了解要刪除的內容。)

-d

刪除一個分支。
該分支必須在其上游分支中完全合並,如果沒有使用--track--set-upstream設置上游,則必須在HEAD完全合並。


但是,如果您確實“丟失”了您的工作,請參閱有關 reflog眾多博客之一(正如James Kyburz在評論中所建議的那樣):

Git reflog 來救援

返回列表 Git reflog 的救援 2010 年 9 月 9 日 — 克里斯·斯隆 (Chris Sloan) 撰寫 | 0 條評論 »

前幾天,我正在使用我們當前的分支策略為 Real Travel 開發一個功能,因為我們所做的每個版本都是一個單獨的分支。
不確定這是否是由於拉到深夜導致睡眠不足的原因,但在我將其合並回 master 分支以進行發布之前我不小心刪除了該分支的本地和遠程副本
在短暫的震驚和失去工作時間的想法在我腦海中閃過之后,我冷靜下來並依靠我的 Git 知識。
閱讀完整的提交歷史記錄:

有兩種方法可以在 git 中讀取提交歷史。 第一種方式顯示提交細節的列表,而另一種方式顯示參考當前HEAD的日志。

// log of detailed commits by users
$> git log

// reference log compared to the current HEAD
$> git reflog

使用reflog命令,我能夠准確地找出對已刪除分支的最后一個引用的位置。
reflog的示例輸出可能如下所示:

c7f3d98 HEAD@{0}: commit: Merged in some code
f5716c8 HEAD@{1}: pull : Fast-forward
d93c27b HEAD@{2}: commit: Added some items to project
...

現在 reflog 不會准確顯示分支被刪除的位置,但是如果您記得對該分支的最后一次提交並且有足夠詳細的消息,那么應該很容易找到和恢復。

通過檢查你想要一個新分支的 HEAD 來恢復你的分支是直接的。

$> git checkout -b my_new_branch HEAD@{5}

您也可以使用散列來簽出新分支。

$> git checkout -b my_new_branch d93c27b

足夠簡單,現在我可以繼續在刪除之前實際合並分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM