背景
有一天爽撒,突然要上線一個(gè)項(xiàng)目淮摔。
依稀記得這個(gè)項(xiàng)目是在疫情之前開發(fā)的,他安靜的躺在我項(xiàng)目的某個(gè)分支下面甲锡。
開發(fā)完成之后公司遷移過幾次git遠(yuǎn)程倉庫。
這些代碼幾乎快要淡出我的記憶羽戒。
我看了一下遠(yuǎn)程似乎沒有找到我要的分支缤沦。
然后,看了一下我本地的分支易稠,并沒有找到缸废。
然后我有些慌了。驶社。企量。
過程
首先我要查找我之前刪除過的分支,執(zhí)行以下命令
git reflog
這里有一些之前切換分支信息亡电。
我要根據(jù)我之前提交代碼時(shí)間大致篩選出一些head届巩。
也許在那里能找得到一些線索
# 將上面的列表中檢出一個(gè)新的分支 第一個(gè)1279是新分支的名稱 后一個(gè)是需要檢出來源分支
git branch 1279 HEAD@{1279}
# 切換到檢出的分支
git checkout 1279
# 查看當(dāng)前分支的提交記錄
git log
然而,這個(gè)分支最后一次提交是2020年2月份乒,查看這個(gè)分支的合并記錄后恕汇,再使用工具查看這個(gè)分支的合并記錄
上面根本沒有我之前寫代碼提交的影子。
這個(gè)時(shí)候或辖,依稀記得剛剛上班的時(shí)候瘾英,因?yàn)樽约赫`操作(這里還有劇情,具體省略)颂暇,刪除了本地項(xiàng)目文件夾缺谴。
當(dāng)前所有的分支,都是在線上master分支檢出的耳鸯。
因?yàn)槭祝耶?dāng)時(shí)的代碼沒有上線,所以master上也不會有代碼的提交記錄县爬。
此時(shí)煌集,我陷入了絕望。捌省。苫纤。
就在,我準(zhǔn)備開始估算重新寫需要花費(fèi)多少時(shí)間時(shí)。
突然卷拘,我腦海里閃過一個(gè)念頭
我們之前有個(gè)本地機(jī)器喊废,之前我們作為測試環(huán)境使用。
那臺機(jī)器上擁有我們之前測試用的代碼栗弟,以及所有的提交到測試分支的git記錄污筷。
同樣的方法,我定位到了我需要的heade乍赫,
# 查看當(dāng)前分支的提交記錄
git log
# 找到需要定位的點(diǎn)瓣蛀,從哪個(gè)點(diǎn)檢出分支
git branch myLostBranch ccf4b6d037ccafd6bdf7a8508b04c038a6ad2c9c
至此,只需要將分支myLostBranch 推到遠(yuǎn)程倉庫雷厂,然后下載到我本地惋增。
大功告成!
后續(xù)改鲫,我需要手動(dòng)將代碼合并到我需要的分支上诈皿。因?yàn)椋@些代碼已經(jīng)滯后很久了~
反思
- 本地代碼及時(shí)提交遠(yuǎn)程倉庫
- 除非萬不得已像棘,不要?jiǎng)h除本地項(xiàng)目文件夾稽亏,(這里主要不要?jiǎng)h除git操作記錄)
- 最好使用git rebase 代替git merge