git-rebase之食用后悔藥

我在進(jìn)行一個(gè) Git 的常用操作 - rebase 時(shí),遇到了一個(gè)致命錯(cuò)誤,導(dǎo)致開發(fā)分支上的commit丟失?;艔埖耐瑫r(shí),由于相信 Git 提供了保險(xiǎn)措施,我找到了恢復(fù)丟失的 commit 的方法。這里記錄一下。

我進(jìn)行的這個(gè) rebase 操作是 Git 分支管理中很常見的一個(gè)操作:

我在一個(gè)分支上做一個(gè) feature 的開發(fā),這個(gè)分支叫做:dev。另外有 master 分支與預(yù)發(fā)布的分支同步。當(dāng)有一個(gè)功能需要快速開發(fā)并上線時(shí),我會(huì)切換到 master 分支進(jìn)行代碼編寫并合并到預(yù)發(fā)布分支,然后切換回當(dāng)前的開發(fā)分支:dev。切過去之后需要將 master 的最新修改合并到 dev ,使用 git rebase master 來實(shí)現(xiàn)。當(dāng) rebase 時(shí)遇到?jīng)_突,需要將這些沖突的地方手動(dòng) fix, 并且 git add 然后 git rebase –continue。但是假如最后一步 沒有用 continue, 而是用了 git rebase –skip,那就完蛋了,所有開發(fā)分支上未合并到 master 的 commit 統(tǒng)統(tǒng)丟失。

下面開始嗑藥:

Git 并不會(huì)真的將那些已刪除的commits從它的數(shù)據(jù)中刪除,所以我的那些被不小心刪除的commits仍舊保存在 Git 的數(shù)據(jù)文件中,在某個(gè)地方,我只需要把它們找出來。

首先,需要查看 .git/logs/refs 目錄, 在它下面會(huì)看到兩個(gè)目錄 heads 和 remotes。我們需要進(jìn)入 .git/logs/refs/heads, 因?yàn)?remotes 保存的是 remote branch 的信息。在 .git/logs/refs/heads/ 目錄下會(huì)看到一些和分支同名的文件。找到我操作的分支: dev, 打開查看其中內(nèi)容。

此文件中保存了我在此分支上的操作記錄,也包括了我最近的那次rebase,從操作前head 對應(yīng)的 commit 的 sha1 到 rebase 之后 head 對應(yīng)的 commit 的 sha1 。 那接下來的操作就變得十分簡單:

$ git checkout -b dev-recovery id

這個(gè)操作會(huì)以我rebase之前的head為base新建一個(gè) branch,這個(gè)branch就包含了我所有丟失的commits。這樣丟失的數(shù)據(jù)就找回來了。

注:后來聽同事介紹,下面還有種藥,待驗(yàn)證。

git reflog

git reset --hard id

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • git 使用筆記 git原理: 文件(blob)對象,樹(tree)對象,提交(commit)對象 tree對象 ...
    神刀閱讀 3,849評論 0 10
  • 1. GIT命令 git init在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄,執(zhí)行g(shù)it init,會(huì)初始化一個(gè)re...
    江邊一蓑煙閱讀 888評論 0 0
  • 朋友整理的,放這里偶爾過來看看 一、基本介紹 首先,Git作為版本控制系統(tǒng),他的原理與SVN為首的集中式版本控制系...
    allenzhan閱讀 1,098評論 0 3
  • 一、Git是什么? 是一個(gè)開源的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常 大的項(xiàng)目版本管理。 Git ...
    名字誰不會(huì)取閱讀 1,208評論 0 0
  • 這里沒有空氣沒有聲音沒有呼吸沒有回應(yīng) 透著一點(diǎn)紅色的好多條小魚擠在小小的逼仄的塑料瓶中
    葺寶閱讀 114評論 0 1

友情鏈接更多精彩內(nèi)容