昨天博主在臨近下班之時,準備提交代碼到遠程Git,當我Pull遠程代碼的時候提示我有衝突,主要是resource目錄下的文件被刪除的更新,奈何IDEA又不給我個合併的界面,只告訴我這幾個文件須要合併~html
因而我腦殼一熱就回滾到有須要合併的那個commit版本,而後就fuck,我暫存區的代碼所有「game over!」不見了。git
發現代碼不見了頓時就像第一次見了喜歡的姑娘,內心那是一波又一波的小鹿亂撞,不過這是悲傷的。web
因而乎就在網上急切的尋找辦法,終於在我一頓操做猛如虎的搜索下,最終將代碼恢復了。app
在倉庫的目錄下打開終端,輸入:ui
find .git/objects -type f | xargs ls -lt | sed 60q
複製代碼
其中末尾的60q
表明最近60次的add操做,而後會出來不少相似於這樣的記錄:lua
-r--r--r-- 1 licoy staff 249 Jun 17 17:59 .git/objects/c0/dd72f08b16a4f9c1d87b836b7ecee75a332252
-r--r--r-- 1 licoy staff 45 Jun 17 17:59 .git/objects/58/c50797f9fe9dceda109019a2b8d9cf18a48df4
-r--r--r-- 1 licoy staff 46 Jun 17 17:59 .git/objects/9c/9c6c686a21fc394d8dfc550f41824205b1dffa
-r--r--r-- 1 licoy staff 750 Jun 17 17:59 .git/objects/d7/73c7e375a316fe3e00800ffd5c5be49b00fba3
-r--r--r-- 1 licoy staff 1217 Jun 17 17:59 .git/objects/6b/a44cf7a71f83f06d969af0a2464451edc133bb
-r--r--r-- 1 licoy staff 29067 Jun 17 17:57 .git/objects/1a/56f322c6cbe07642ca248cc8de3a63d5acd0d7
-r--r--r-- 1 licoy staff 200 Jun 17 17:55 .git/objects/30/3d28198f9375111092438ddb7d872aca84f863
-r--r--r-- 1 licoy staff 79 Jun 17 17:55 .git/objects/ab/0c251513237d54b9c439e73a2f26486432ed3d
-r--r--r-- 1 licoy staff 234 Jun 17 17:55 .git/objects/e4/57508e691703f4ff58a69f3410cd28f3780d63
-r--r--r-- 1 licoy staff 45 Jun 17 17:55 .git/objects/67/948e2e1cb35a82799585b64859d8473b01dbe7
-r--r--r-- 1 licoy staff 47 Jun 17 17:55 .git/objects/f5/4b5612be0810f4658c15a9a2297ac34198c7e0
-r--r--r-- 1 licoy staff 250 Jun 17 17:39 .git/objects/1a/908f631cfe95ab0979877f929280992bacc009
...
複製代碼
而後咱們選擇差很少最近的時間記錄,而後找到他的文件路徑在終端輸入spa
git cat-file -p {commit_id} > c.txt
複製代碼
其中{commit_id}
是.git/objects/ab/0c251513237d54b9c439e73a2f26486432ed3d
部分中的ab/0c251513237d54b9c439e73a2f26486432ed3d
,要去掉中間的斜槓,而後就是一次commit_id
。3d
執行上述命令以後會將commit_id
主要內容輸出到c.txt
,而後咱們須要人工辨別記錄內容是否是咱們暫存區的內容,若是是,那咱們只須要在回滾到這個commit_id
版本便可。code
此次的操做以後讓我對每次的回滾更加當心翼翼了,說白了仍是對Git不是那麼透徹,git reset --hard
要慎用,用很差就像用了rm -rf xxx
同樣,後悔莫及喲~orm