簡體   English   中英

如何在本地 git 項目中恢復以前提交(但未刪除)的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM