2011-02-09 147 views
106

在我的git倉庫,我在git的日誌做5次提交,如下圖所示:如何將我的git倉庫切換到一個特定的提交

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc 
Author: Michael 
Date: Fri Feb 4 15:26:38 2011 -0800 

commit b688d46f55db1bc304f7f689a065331fc1715079 
Author: Michael 
Date: Mon Jan 31 10:37:42 2011 -0800 

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda 
Author: Michael 
Date: Wed Jan 26 13:33:17 2011 -0800 

commit 4771e26619b9acba3f059b491c6c6d70115e696c 
Author: Michael 
Date: Wed Jan 26 11:16:51 2011 -0800 

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59 
Author: Michael 
Date: Fri Jan 21 11:42:27 2011 -0800 

我怎麼可以回滾我以前4在本地提交科? 換句話說,我如何創建一個沒有我最新的4個提交的分支(假設我有從git日誌提交的SHA的SHA)?

回答

127

創建新的分支(本地):

  • 隨着提交哈希值(或部分)

    git checkout -b new_branch 6e559cb 
    
  • 或返回4個提交從頭部

    git checkout -b new_branch HEAD~4 
    

一旦你的新分支創建(本地),你可能想複製相同名稱的遙控器上的這種變化: How can I push my changes to a remote branch


對於丟棄最近三次提交,看Lunaryorn's answer below


對於移動當前的分公司負責人到指定的承諾,而創建一個新的分支,看到Arpiagar's answer below

39

如果你想扔過去4個提交時,可以使用:

git reset --hard HEAD^^^^ 

或者,你可以指定一個哈希承諾要恢復到:

git reset --hard 6e559cb 
+3

這省去了轉移步驟。如果他運行的是這裏顯示的內容,他將永久失去這些頂級提交。 – 2011-02-09 00:19:05

+3

好吧,不一定是永久性的 - 人們可以通過`git reflog`獲得前一個頭部的SHA並重新設置它 - 但它會拋棄它們,是的。 – Amber 2011-02-09 00:21:42

10

就檢出提交你希望你的新分支開始,並創建一個新的分支

git checkout -b newbranch 6e559cb95 
56

以上所有的命令創建一個新的分支,並與最新的承諾作爲一個在命令中指定,而只是如果你想給你的當前分支磁頭移動到指定的提交,下面是命令

git checkout <commit_hash> 

分離並指向特定提交的頭部和從創建一個新的分支保存當用戶只是想查看分支狀態直到該特定提交。


那麼你可能想回去最新提交&修復分離的頭:

Fix a Git detached head?

相關問題