【Git實戰技巧】恢復被強制推送push失蹤的代碼

【Git實戰技巧】恢復被強制推送push失蹤的代碼

前言

Git是一個易學難精的分佈式版本控制系統,被咱們碼農經常使用於代碼的管理。若是你還不瞭解Git,建議先經過廖雪峯的Git教程進行了解,再來看本文,由於本文以使用技巧爲主,不會在基礎名詞上作過多解釋。git

廖雪峯的Git教程:算法

https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000後端

恢復被強制推送push失蹤的代碼

在常規的開發流程中,不免有時由於各類緣由(例如須要使用git rebase)會須要使用到git push -f,也就是強制推送,該命令會覆蓋遠程分支。分佈式

但若是操做不當,會容易把小夥伴的以前提交的commit給覆蓋掉,不要慌,這並不表明你小夥伴的commit已經永遠找不回來了,大部分狀況下,他們仍是能夠被找回的。ide

git reflog 能夠查看全部分支的全部操做記錄(包括(包括commit和reset的操做),包括已經被刪除的commit記錄,git log則不能查看已經刪除了的commit記錄工具

雖然有reflog這跟救命稻草,但因爲Git會定時gc(回收),清理掉reflog,因此被人覆蓋後不要等待過久才進行恢復操做,否則可能就真的找不回了。命令行

操做方法

  1. 備份當前工做區的數據
    你能夠使用git stash等命令備份下如今正在寫的代碼版本控制

  2. 在命令行輸入git reflog/git log -g
    顯示全部歷史操做,找到你須要的提交(包括已經被刪除的commit記錄,git log則不能查看已經刪除了的commit記錄)
    【Git實戰技巧】恢復被強制推送push失蹤的代碼

2.1 強制回退到當時被刪除的commitcode

git reset --hard <SHA1>

2.2 或者直接對象

git cherry-pick <SHA1>

直接把當時版本的工做拿回來。不過若是有衝突的話還要處理衝突。

  1. 強推上遠程分支
git push -f origin <branch>

若是引發commit丟失的緣由並無記錄在reflog 中,好比運行了rm -Rf .git/logs/, 由於 reflog 數據是保存在 .git/logs/ 目錄下的,這樣就沒有 reflog 了。

能夠使用 git fsck 工具,該工具會檢查倉庫的數據完整性。若是指定 --full 選項,該命令顯示全部未被其餘對象引用 (指向) 的全部對象:

【Git實戰技巧】恢復被強制推送push失蹤的代碼
而後,用相同的方法就能夠恢復它,即建立一個指向該 SHA 的分支。

是否是對於強推git push -f再也不慌了呢?

關注我

原創博客主要內容

  • Java知識點複習全手冊
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • SpringBoot菜鳥入門實戰系列
  • SpringCloud菜鳥入門實戰系列
  • 爬蟲相關技術文章
  • 後端開發相關技術文章
  • 逸聞趣事/好書分享/我的興趣

我的公衆號:後端技術漫談

【Git實戰技巧】恢復被強制推送push失蹤的代碼
公衆號:後端技術漫談.jpg

若是文章對你有幫助,不妨收藏,投幣,轉發,在看起來~

相關文章
相關標籤/搜索