git - 你如何回滾( 複位) Git存儲庫和一個特定的提交?

  显示原文与译文双语对照的内容

這個問題已經有了如下答案:

我克隆git存儲庫,然後試圖向一個特定的回滾該事務提交在開發過程的早期。 所有添加到存儲庫之後,這一點對我來說是不重要的所以我想省略所有後續更改本地源代碼。

然而,當我試圖回滾的gui工具它不更新我的本地文件系統——我總是得到最新的項目的源代碼。

正確的方法是什麼把存儲庫的源代碼作為特定歷史上提交的項目和省略所有後來更新?

时间:


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


  • git reset 沒有 --hard 選項重置提交歷史,而不是文件。 使用 --hard 選項,工作樹中的文件也被重置。 ( 貸記用戶 )

  • 如果你希望提交該狀態,那麼遠程倉庫也會指向回滾提交: git push <reponame> -f ( 貸記用戶 )

更新:

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

在當前狀態創建分支副本:


git branch crazyexperiment

( git branch <name> 命令將使你當前的分支仍簽出。)

使用 git reset 。exe將當前分支重置為你想要的提交:


git reset --hard c2e7af2b51

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

當你決定你的瘋狂實驗分支不包含任何有用的東西時,你可以用以下方法刪除它:


git branch -D crazyexperiment

在使用 history-modifying git命令( 複位,複位) 啟動備份分支之前,總是很好。 一旦你感到舒服,你就不會發現。 如果你確實以不需要的方式修改歷史,並且沒有創建備份分支,請查看 git reflog 。 即使沒有指向它們的分支或者標記,Git仍然會持續提交一段時間。

原始答案:

git reset --hard 方法稍微嚇人一點的方法是創建一個新分支。 假設你位於 master 分支,並且你想要返回的提交是 c2e7af2b51

重命名你當前的主分支:


git branch -m crazyexperiment

檢查你的好提交:


git checkout c2e7af2b51

在這裡創建新的主分支:


git checkout -b master

現在你仍然有你的瘋狂的實驗,如果你想看它之後,但是你的主分支回到你最後好點,可以被添加到。 如果你真的想扔掉實驗,你可以使用:


git branch -D crazyexperiment

...