[英]How do you roll back (reset) a Git repository to a particular commit? [duplicate]
這個問題在這里已有答案:
我克隆了一個Git存儲庫,然后嘗試在開發過程的早期將其回滾到特定的提交。 在該點之后添加到存儲庫的所有內容對我來說都不重要,因此我想省略本地源代碼中的所有后續更改。
但是,當我嘗試回滾GUI工具時,它不會更新我的本地文件系統 - 我總是最終得到項目的最新源代碼。
從項目歷史中的特定提交中獲取存儲庫的源代碼的正確方法是什么,並省略所有后續更新?
由於更改跟蹤分支的創建和推送方式,我不再建議重命名分支。 這就是我現在推薦的:
以當前狀態制作分支的副本:
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.