亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用'git reset --hard HEAD'恢復到先前的提交?

如何使用'git reset --hard HEAD'恢復到先前的提交?

Git
慕虎7371278 2019-12-07 13:18:38
我知道Git會跟蹤我對應用程序所做的更改,它會一直保留到它們,直到我提交更改為止,但這是我掛斷的地方:當我想恢復到以前的提交時,我使用:git reset --hard HEADGit返回:HEAD is now at 820f417 micro然后,如何將硬盤驅動器上的文件還原到先前的提交?我的下一步是:git add .git commit -m "revert"但是我的硬盤上沒有任何文件已更改...我在做什么對/錯?
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

首先,始終要注意這git reset --hard是一個潛在的危險命令,因為它會丟棄所有未提交的更改。為了安全起見,git status在使用前,請務必檢查其輸出是否干凈(即為空)。


最初,您說以下內容:


因此,我知道Git會跟蹤我對應用程序所做的更改,它會一直保留到它們,直到我提交更改為止,但這是我掛斷的地方:


不對 Git僅在暫存文件(帶有git add)或創建提交時記錄文件的狀態。一旦創建了一個使項目文件處于特定狀態的提交,它們就非常安全,但是直到那時Git才真正對文件進行“跟蹤”。(例如,即使您git add要暫存文件的新版本,也會覆蓋暫存區域中該文件先前已暫存的版本。)


在您的問題中,然后繼續詢問以下內容:


當我想恢復到以前的提交時,我使用:git reset --hard HEAD git返回:HEAD現在位于820f417 micro


然后,如何將硬盤驅動器上的文件還原到先前的提交?


如果您這樣做,git reset --hard <SOME-COMMIT>那么Git將:


使您當前的分支(通常master)回到<SOME-COMMIT>。

然后,使工作樹中的文件和索引(“暫存區”)與中提交的版本相同<SOME-COMMIT>。

HEAD指向您當前的分支(或當前的提交),因此所有git reset --hard HEAD要做的就是丟棄您具有的所有未提交的更改。


因此,假設您要返回的良好提交是f414f31。(您可以通過git log或任何歷史記錄瀏覽器找到它。)然后,根據實際要執行的操作,您可以有幾個不同的選擇:


更改您當前的分支以指向較早的提交。您可以使用git reset --hard f414f31。但是,這是在重寫分支的歷史記錄,因此,如果您已與任何人共享此分支,則應避免使用它。另外,您之后所做的提交f414f31將不再位于master分支的歷史記錄中。

創建一個新提交,該提交表示與項目完全相同的項目狀態f414f31,但是只需將其添加到歷史記錄中,這樣就不會丟失任何歷史記錄。您可以使用此答案中建議的步驟進行操作,例如:


git reset --hard f414f31

git reset --soft HEAD@{1}

git commit -m "Reverting to the state of the project at f414f31"


查看完整回答
1 反對 回復 2019-12-07
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

警告:git clean -f將刪除未跟蹤的文件,這意味著它們永久消失了,因為它們沒有存儲在存儲庫中。在執行此操作之前,請確保您確實要刪除所有未跟蹤的文件。


試試看,看看git clean -f。


git reset --hard不會刪除未跟蹤的文件,而git-clean將從根目錄中刪除所有不在Git跟蹤下的文件。


或者,就像@Paul Betts所說的,您可以執行此操作(請注意-也會刪除所有忽略的文件)


git clean -df

git clean -xdf 警告!這也會刪除忽略的文件


查看完整回答
反對 回復 2019-12-07
  • 2 回答
  • 0 關注
  • 5026 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號