![](/img/trans.png)
[英]Deleted a Git Branch and it changed my HEAD, How do I change it back?
[英]How do I get the deleted-branch back in Git?
我正在嘗試使用 Git 進行我們的軟件開發。 我發現如果我在 Git 中刪除一個分支,我可能會永遠丟失我的代碼。 這讓我很驚訝。 我認為作為一個版本控制系統,它應該能夠讓我做任何事情(甚至是愚蠢的)而不必擔心損害我的工作。
下面的步驟是我所做的:
問題是如何回滾刪除分支的動作?
或者,我怎樣才能在 Git 中獲取所有歷史記錄,甚至是在日志中消失的東西?
為了首先避免這個問題, Jefromi在評論中提出建議:
另一個提示:只使用
git branch -d
,而不是git branch -D
。
如果您要刪除可能導致您失去工作的內容,您會收到警告,然后您可以在使用-D
之前花點時間思考。
(或者,您可以從gitk
刪除,以便您真正了解要刪除的內容。)
-d
刪除一個分支。
該分支必須在其上游分支中完全合並,如果沒有使用--track
或--set-upstream
設置上游,則必須在HEAD
完全合並。
但是,如果您確實“丟失”了您的工作,請參閱有關 reflog的眾多博客之一(正如James Kyburz在評論中所建議的那樣):
返回列表 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.