如果你的代碼git add過就還有救~~~~
- 提交失敗
首先有個小插曲
在我多次 git checkout ; git stash; git stash pop; git merge的一頓操作之后,git 提交代碼的時候突然出現了下面的報錯,(別問我為什么,事情發生的就是這么突然):
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
解決辦法:
rm -f ./.git/index.lock
- 后來了解到原因大致是:進程的管理有個上鎖機制,正常情況下,會上鎖,進程結束,然后解鎖進程。但是由於我一系列的操作,導致git崩潰,已經上鎖的index.lock沒有來得及解鎖而仍然存在。當我再用git add的時候,git發現已經存在了index.lock這個文件,導致報錯
- 代碼丟失
估計是受👆的影響,雖然我記得我commit了 甚至還push到遠程了,但是!!當我時隔兩天再次回來開發的時候,代碼沒了(因為我中間重啟過電腦😢。。。)。情況呢就是這么個情況,好在.git出現問題之前我應該是add過,還有救,接下來是自救的過程:
第一步:找到之前add過的文件,有以下幾種方法
方法一:git fsck --lost-found 然后到.git/lost-found目錄下找找看有沒有你丟失的文件
方法二:git fsck > files.txt 直接寫到文件中, 需要處理一下,只保留后面的字符串
tips:cmd+f2(mac 的f2是 fn+2) 可以多光標同時操作,很方便
方法三:find .git/objects -type f | xargs ls -lt | sed 60q查看最近60次add的文件
會直接打印出來,需要提取的是object/后面的值,第一個‘/’要去掉。例如第一個是43442c51e7c70e38eeedd9cfa82a1546271e0155
第二步: 通過git show 導出文件
一個一個的看可以用這個命令
git cat-file -p 0a2a25fd02e7baaf988b720df7c1cb8a7ea4729d > history.txt
可以寫一個shell腳本
#!/bin/bash
for line in `cat files.txt`
do
echo "File:${line}"
git show ${line} > files/${line}.txt
done
第三步:手動復原想要的文件
點進去,有些可能是一些空文件,有一些正好是你丟失的文件,需要自己手動加回到正確的位置。前后找方法花了我三個小時的時間,但總比重新寫一遍來的快。(這次丟的代碼可是拆分了五六個組件來着,涉及到的文件修改超級多,心里默念,遇到凡事不要慌~~~