我試圖修復我的 git repo 和 .gitignore 沒有跟蹤正確的檔案,一切都從遠程和本地消失了。這是我的 ubuntu 服務器上 bash 命令的一些歷史記錄:
1952 git status
1955 git rm -r --cached .
1957 git commit -m "git fix"
1958 git push
1981 git rm -rf data/
1982 git rm -r --cached data
1983 git clean -xdf
1986 git ls-files
1995 ls
主要問題是一切都在本地或遠程消失了。感謝致敬,
uj5u.com熱心網友回復:
一些 Git 命令是“危險的”:它們會從可見檔案(作業樹)的世界中清除實際檔案。而且他們不只是以某種狡猾的方式隱藏它們;他們只是將它們移除,就好像它們從未存在過一樣。您已選擇使用其中兩個命令:git clean和git rm。
因此,如果您使用這些命令,您當然可以以永遠無法恢復的方式洗掉檔案。
但是,Git 的作業是保留作業樹的早期狀態。因此,如果您進行了包含任何這些檔案的任何狀態的任何提交,那么這些狀態將保留在這些提交中。因此,您所要做的就是以下一項或兩項:
回傳到包含您的檔案的較早提交
從包含它的較早提交中提取單個檔案
由于在您剛剛提交之前的提交中一切都非常好,您可以簡單地通過說回到那個提交
git checkout @~
如果您對所看到的內容非常滿意,那么您還需要通過將分支重置為您現在看到的內容來退出分離頭模式:
git reset HEAD
但是,如果您的作業樹中還有其他檔案并且從未提交過,那么這不是 Git 的事,也不是 Git 的錯:您是使用非常危險的詞cleanand 的人rm,所以無論您做了什么損害,你對自己做了。Git 只存盤提交;這就是它所知道和關心的全部。
那么這里的教訓是什么?是“永遠不要發出危險的命令”嗎?一點也不!發出您喜歡的任何命令,但首先您需要確保安全。要保留檔案(意味著處于特定狀態的檔案),請提交它 - 并在開始發出危險命令之前執行此操作。當您發出危險命令時,要冒丟失檔案的風險,請不要提交它。就這么簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/337629.html
