2013-05-14 30 views
15

爲了追蹤我的軟件在哪一點破壞了某個功能,我需要查看我的存儲庫的舊版本。我只想將工作目錄設置爲較舊的提交,使用代碼進行播放,之後放棄更改,然後嘗試另一次提交。如何將工作目錄設置爲較舊的提交?

我不想改變任何關於提交的內容,既不刪除也不創建它們。我嘗試使用git reset,但在此之後,更新的提交不再顯示。所以我再次下載版本庫,因爲我不知道如何恢復。

+0

我在谷歌搜索之後來到這裏「[將工作目錄交換到較早的提交但保持不變](https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF- 8#安全=活動&q =交換+工作+目錄+到+ +的早期+承諾+但+留下+頭+不變)」。我結束了使用'git checkout - '我想恢復到之前提交的文件 – dumbledad 2016-11-01 15:53:58

回答

13

簡單git checkout old-sha1可以是一個開始,但對於那種任務的真正的命令是:

git bisect

查找二進制搜索介紹了一個bug

如果你有能一個腳本來測試,如果你的工作樹「工程」或沒有,你可以在以前的承諾通過git bisect執行該腳本的變化,找到打破你的測試的第一次提交。

請注意,此命令尚未直接受GitHub for Windows支持:您將不得不打開一個shell。


一個git checkout會離開你在一個分離的頭,這並不重要,因爲你不會做任何修改。
要回到了你,簽了一個分支:

git checkout master 

請參閱 「Why did git detach my head?」。

+0

謝謝,我以爲'checkout'只適用於以前的分支。我可以使用哪種腳本進行「平分」?我的應用程序是用本機C++編寫的。順便說一下,Git給我留下了深刻的印象,包括這樣一個命令。 – danijar 2013-05-14 09:43:07

+0

@danijar不,你可以檢查任何樹木。例如,'git checkout「@ {10 minutes ago}」'會在10分鐘前給你提交。 – VonC 2013-05-14 09:45:22

+0

@danijar git bisect,任何你想要的腳本,只要它退出狀態0(工作)或1(失敗)。 – VonC 2013-05-14 09:45:56

1

使用git checkout <branch_name>您可以切換到其他可用分支。如果你想重置HEAD到老犯,你可以試試下面的命令:

  • 的git的復位 - 硬HEAD〜1通過到HEAD重置單個提交
  • git的復位 - git reset --hard <commit> 通過這種方式,你可以將工作目錄設置到舊:硬頭〜2的2提交

此外,如果你已經提交,那麼你可以試試這個命令重置HEAD承諾。

要徹底放棄更改,您可以嘗試:git reset --hard這將清理您的目錄到以前的提交。

5

您可以通過使用下列檢查另外一個分支代碼指數:

git checkout my-other-branch . 

的點是表示要爲整個庫做一個路徑說明。您也可以只指定一個特定的文件夾。從技術上講,你可以爲my-other-branch參數指定任何'tree-ish'說明符,例如標籤,提交散列,例如HEAD~1等等。如果你想這些變化是不分級的,你可以再做:

git reset HEAD 

假設你在一個乾淨的狀態開始,你現在就會有你的工作目錄是在相同的狀態my-other-branch

相關問題