簡體   English   中英

git在硬重置之前返回到先前的提交

[英]git go back to a previous commit before reset hard

我更改了一些代碼,然后運行

git add .
git commit -m "message1"

但是之后,我做到了

git reset hard
git pull
git push

(當然,推送實際上什么也沒做。)

現在,我想在提交“ message1”時檢索文件的狀態。 我怎樣才能做到這一點?

git reset hard索引 (不是工作目錄)重置為名為hard的分支狀態。 因此,實際上沒有任何更改:您可以執行簡單的git reset來僅重置索引。 無論如何,沒有其他改變。

如果您進行了git reset --hard ,那是另一回事。 這會將工作目錄中的索引和未提交的更改重置為HEAD狀態,即當前分支的最后一次提交。 由於您是在該命令之前直接進行提交的,因此即使您在該提交中包括了工作目錄的所有更改,也不會丟失任何內容。 如果您沒有這樣做,那么您就不走運了,那些從未提交到索引的,尚未提交的更改都將丟失。

git pull將從遠程獲取並將所有更改合並到您的分支中,因此這可能是實際發生更改的地方。 由於您是在本地進行提交的,因此有兩種情況:您是最新的,什么都沒有更改; 遠程發生了變化,Git創建了一個合並提交。 在后一種情況下,您可以使用git reset --hard HEAD@{1}恢復該狀態。 您還可以使用git reflog查看git reflog以查看HEAD先前指向的位置。

至於git push ,它什么也不做是不明顯的。 實際上,由於您在本地進行了提交,因此它應該已經做了一些事情。 它應該已經將您的提交和最終的合並提交(如上所述)推送到了遠程服務器。 在這種情況下,不建議再次返回(使用上述命令)以撤消那些更改,因為您永遠都不應刪除已經發布的提交。

只需使用git reflog 它將顯示您在存儲庫中所做的全部歷史記錄。
跟蹤要還原以將其簽出的提交后,請打開一個新分支(因為您將處於分離的HEAD中),然后從該點繼續進行工作。

第二件事

將內容添加到存儲(索引)后,只要您的gc沒有運行,您就可以隨時對其進行恢復。 您可以使用git fsck找出這些文件的SHA-1並使用`git cat-file -p'恢復它們以查看內容並將其復制到您的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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