簡體   English   中英

如何將Git存儲庫回滾(重置)到特定的提交? [重復]

[英]How do you roll back (reset) a Git repository to a particular commit? [duplicate]

這個問題在這里已有答案:

我克隆了一個Git存儲庫,然后嘗試在開發過程的早期將其回滾到特定的提交。 在該點之后添加到存儲庫的所有內容對我來說都不重要,因此我想省略本地源代碼中的所有后續更改。

但是,當我嘗試回滾GUI工具時,它不會更新我的本地文件系統 - 我總是最終得到項目的最新源代碼。

從項目歷史中的特定提交中獲取存儲庫的源代碼的正確方法是什么,並省略所有后續更新?

git reset --hard <tag/branch/commit id>

筆記:

  • 沒有--hard選項的git reset重置提交歷史記錄,但不會重置文件。 使用--hard選項,工作樹中的文件也會重置。 貸方用戶

  • 如果您希望提交該狀態,以便遠程存儲庫也指向回滾提交,請執行以下操作: git push <reponame> -f貸記用戶

更新:

由於更改跟蹤分支的創建和推送方式,我不再建議重命名分支。 這就是我現在推薦的:

以當前狀態制作分支的副本:

git branch crazyexperiment

git branch <name>命令將使您仍然檢出當前分支。)

使用git reset將當前分支重置為所需的提交:

git reset --hard c2e7af2b51

(將c2e7af2b51替換為您要返回的提交。)

當您確定您的瘋狂實驗分支不包含任何有用的內容時,您可以使用以下命令將其刪除:

git branch -D crazyexperiment

當您開始使用歷史記錄修改git命令(重置,rebase)以在運行它們之前創建備份分支時,總是很好。 最后一旦你感到舒服,你就不會覺得有必要。 如果您確實以您不想要的方式修改歷史記錄並且尚未創建備份分支,請查看git reflog 即使沒有指向它們的分支或標簽,Git也會保持一段時間的提交。

原始答案:

git reset --hard方法更難以實現的方法是創建一個新分支。 假設您在master分支上,並且要返回的提交是c2e7af2b51

重命名當前的主分支:

git branch -m crazyexperiment

看看你的好承諾:

git checkout c2e7af2b51

在這里建立你的新主分支:

git checkout -b master

現在,如果您想稍后查看它,您仍然可以進行瘋狂的實驗,但是您的主分支又回到了您最后已知的優點,准備添加到。 如果您真的想丟棄實驗,可以使用:

git branch -D crazyexperiment

對於那些有git gui彎曲的人,你也可以使用gitk。

右鍵單擊要返回的提交,然后選擇“將master branch重置為here”。 然后從下一個菜單中選擇硬盤。

當你說'GUI工具'時,我假設你正在使用Git For Windows。

重要的是,如果你還沒有,我強烈建議你創建一個新的分支。 這樣,在測試更改時,您的主人可以保持不變。

使用GUI,您需要“回滾此提交”,就像您擁有視圖右側的歷史記錄一樣。 然后您會注意到您將所有不需要的文件作為左側提交的更改。 現在,您需要右鍵單擊所有未提交文件上方的灰色標題,然后選擇“忽略更改”。 這會將您的文件設置回這個版本中的文件。

暫無
暫無

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

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