2 回答

TA貢獻1807條經(jīng)驗 獲得超9個贊
首先,始終要注意這git reset --hard是一個潛在的危險命令,因為它會丟棄所有未提交的更改。為了安全起見,git status在使用前,請務(wù)必檢查其輸出是否干凈(即為空)。
最初,您說以下內(nèi)容:
因此,我知道Git會跟蹤我對應(yīng)用程序所做的更改,它會一直保留到它們,直到我提交更改為止,但這是我掛斷的地方:
不對 Git僅在暫存文件(帶有g(shù)it add)或創(chuàng)建提交時記錄文件的狀態(tài)。一旦創(chuàng)建了一個使項目文件處于特定狀態(tài)的提交,它們就非常安全,但是直到那時Git才真正對文件進行“跟蹤”。(例如,即使您git add要暫存文件的新版本,也會覆蓋暫存區(qū)域中該文件先前已暫存的版本。)
在您的問題中,然后繼續(xù)詢問以下內(nèi)容:
當(dāng)我想恢復(fù)到以前的提交時,我使用:git reset --hard HEAD git返回:HEAD現(xiàn)在位于820f417 micro
然后,如何將硬盤驅(qū)動器上的文件還原到先前的提交?
如果您這樣做,git reset --hard <SOME-COMMIT>那么Git將:
使您當(dāng)前的分支(通常master)回到<SOME-COMMIT>。
然后,使工作樹中的文件和索引(“暫存區(qū)”)與中提交的版本相同<SOME-COMMIT>。
HEAD指向您當(dāng)前的分支(或當(dāng)前的提交),因此所有g(shù)it reset --hard HEAD要做的就是丟棄您具有的所有未提交的更改。
因此,假設(shè)您要返回的良好提交是f414f31。(您可以通過git log或任何歷史記錄瀏覽器找到它。)然后,根據(jù)實際要執(zhí)行的操作,您可以有幾個不同的選擇:
更改您當(dāng)前的分支以指向較早的提交。您可以使用git reset --hard f414f31。但是,這是在重寫分支的歷史記錄,因此,如果您已與任何人共享此分支,則應(yīng)避免使用它。另外,您之后所做的提交f414f31將不再位于master分支的歷史記錄中。
創(chuàng)建一個新提交,該提交表示與項目完全相同的項目狀態(tài)f414f31,但是只需將其添加到歷史記錄中,這樣就不會丟失任何歷史記錄。您可以使用此答案中建議的步驟進行操作,例如:
git reset --hard f414f31
git reset --soft HEAD@{1}
git commit -m "Reverting to the state of the project at f414f31"

TA貢獻1883條經(jīng)驗 獲得超3個贊
警告:git clean -f將刪除未跟蹤的文件,這意味著它們永久消失了,因為它們沒有存儲在存儲庫中。在執(zhí)行此操作之前,請確保您確實要刪除所有未跟蹤的文件。
試試看,看看git clean -f。
git reset --hard不會刪除未跟蹤的文件,而git-clean將從根目錄中刪除所有不在Git跟蹤下的文件。
或者,就像@Paul Betts所說的,您可以執(zhí)行此操作(請注意-也會刪除所有忽略的文件)
git clean -df
git clean -xdf 警告!這也會刪除忽略的文件
- 2 回答
- 0 關(guān)注
- 5016 瀏覽
添加回答
舉報