[英]How to restore previously committed(but NOT deleted) files in local git project
我有一個本地項目目錄(帶有一些源文件),我試圖將其推送到一個新的空白 gitlab 存儲庫並遇到了麻煩。 實際上,為了將本地文件推送到 gitlab 存儲庫,我在本地目錄上運行了幾個 git 命令,現在所有源 src 文件都從本地目錄中消失了。 任何人都可以幫我建議恢復這些文件嗎? 以下是我按給定順序在目錄中運行的命令,這些命令導致文件消失。
git init
git add .
git commit -m "Add existing project files prior to the push to GitHub." ###This actually committed all the source files
git remote add origin https://gitlab.com/<project.git>
### Till this point the command line was showing (master) i.e master branch in bracket
git branch -M develop
git push -uf origin develop ## error: failed to push some ref ...
git push -u origin develop ## error: failed to push some refs to ...
git pull
git push -u origin develop ## error: failed to push some refs to ...
git push ## fatal: The current branch develop has no upstream branch ..
git push --set-upstream origin develop ## error: failed to push some refs to ...
git pull https://gitlab.com/ielts-cmds/IELTS-CMDS-services-grp/cmds-circuit-breaker.git develop ## * branch develop -> FETCH_HEAD .... fatal: refusing to merge unrelated histories
git checkout feature/initial ## switched to another branch..
etc. etc.
請注意,我沒有運行任何刪除或刪除命令,所以我猜測這些文件在本地 git 引用中的某處。 而且我現在不能回到最初的“主”分支。 請幫忙 !
您沒有顯示實際的錯誤輸出,這將有助於診斷更基本的“出了什么問題”問題,但我們可以說明為什么git checkout master
不起作用:您根本沒有名為master
的分支。 你有一個名為develop
的。 如果您願意,可以將名稱切換回master
。
git init git add . git commit -m "Add existing project files prior to the push to GitHub." ###This actually committed all the source files git remote add origin https://gitlab.com/<project.git> ### Till this point the command line was showing (master) ie master branch in brackets git branch -M develop
上面的最后一個操作將(本地)分支名稱從master
更改為develop
。 (注意:通常使用-m
更安全,即小寫m
以避免錯誤地刪除現有的分支名稱。但是如果git init
創建了一個新的空存儲庫,看起來很可能,那么就沒有其他分支名稱了不可能傷害任何東西。)
git push -uf origin develop ## error: failed to push some ref ...
這可能應該有效,並且知道實際的錯誤輸出可能會有所幫助。 我的猜測是有一條附加消息,前綴為remote:
,在此期間 GitLab 告訴你一些重要的事情。
git push -u origin develop ## error: failed to push some refs to ...
鑒於--force
的失敗( -f
是相同的標志,只是用更少的字符拼寫),沒有--force
的推送也會失敗也就不足為奇了。
git pull
這行得通嗎? 如果確實如此,那將是令人驚訝的,因為您隨后會說:
git push ## fatal: The current branch develop has no upstream branch ..
因為沒有附加選項的git pull
也要求當前分支有一個上游集( git fetch
步驟將能夠運行,但git pull
運行的第二個命令需要上游)。
git pull https://gitlab.com/ielts-cmds/IELTS-CMDS-services-grp/cmds-circuit-breaker.git develop ## * branch develop -> FETCH_HEAD .... fatal: refusing to merge unrelated histories
此輸出告訴我ielts-cmds/IELTS-CMDS-services-grp/cmds-circuit-breaker.git
確實有一個名為develop
的分支。 我自己無法訪問該存儲庫,因此我不知道它可能還有哪些其他分支名稱。
該存儲庫develop
中的提交現在也可以在您自己的存儲庫中使用。 但是歷史——即提交集——通過從他們的最后一次develop
提交開始並通過所有其他提交向后工作而獲得獨立於您名為develop
的分支上的提交。 沒關系,因為他們的develop
是他們的分支名稱; 你的develop
是你的名字,這些根本不需要表示同一組提交。
git checkout feature/initial ## switched to another branch..
鑒於上面顯示的輸出,這將失敗。 您仍然會自行develop
。
如果你沒有做任何事情來改變這個事實,你自己的 commit(s) 仍然在你自己的develop
上。 為了使這一點——你的develop
完全獨立於他們的develop
——不那么令人困惑,你可能想要重命名你自己的develop
:
git branch -m develop my-develop
例如。
運行不帶任何選項的git branch
或使用-a
來列出您自己的分支名稱或所有名稱(您的分支名稱以及您的 Git 根據其他存儲庫的分支名稱創建的任何遠程跟蹤名稱)。 如果除了上面顯示的命令之外沒有適用的 Git 命令,您仍然只有一個名為develop
的分支,除非您重命名它。
要解決這個問題,請閱讀一本關於 Git 的好書並了解“相關歷史”的含義,和/或查看,例如,如何修復 git 歷史並正確合並不相關的歷史以及合並不相關的歷史時 git 會發生什么?
首先,@torek 進行解釋,dan1st 和 sytech 進行評論。 有效的解決方案是 git hard reset。 因此,在 git 的日志中,我找到了我提交的那些文件的提交 ID。 對該提交 ID 的 git 硬重置將目錄置於其先前狀態,即所有文件都已恢復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.