2010-06-28 97 views
2

假設我已經做了很多次了。現在我想回到某個提交併查看當時我的工作目錄是什麼樣子的(當我這樣做時我真的希望我的工作目錄改變)。最後回到原來的頭,不搞亂我的提交?!用git走歷史嗎?

我知道這應該很容易做到,我似乎無法找到正確的命令。謝謝。

回答

8

要簽出指定的提交,使用git checkout

git checkout <SHA1 of commit> 

要返回到原來的分支,檢查出來:

git checkout master 

一對夫婦的注意事項:

  • 如果您有未提交的修改,結帳可能會失敗。您可能首先要提交或stash

  • 當你退房的東西不是一個分支,你最終在detached HEAD狀態;也就是說,你的HEAD並沒有提到一個分支 - 驚喜!這意味着特別是,如果您進行了提交,它將不在分支上。如果你想提交,請確保簽出分支。如果你的目的是使提交過你檢查出的一個,你可以檢查出來,並在同一時間創建一個分支:git checkout -b new-branch <SHA1 of commit>

+0

錯誤犯

git diff <sha1> HEAD
  • 見的變化...最後一個注意事項:'git checkout - afile'將會清除您目前在工作目錄中對該文件所做的任何本地更改*,而不會發出任何通知*。 'git checkout abranch'不會。並祈禱你沒有在當前目錄中有一個文件,就像你想結賬的分支一樣。請參閱http://stackoverflow.com/questions/2961240/get-back-the-changes-after-accidental-checkout/2961348#2961348。我對Git的一個真實抱怨(當有1.7+子模塊時,'git status'戲劇性放緩) – VonC 2010-06-28 17:54:28

+0

@VonC:好的,在這種情況下不檢查單個文件,但是要點好。 – Cascabel 2010-06-28 17:59:30

+0

是的,就是這樣。謝謝。我想知道爲什麼在git社區書中沒有關於它的消息。只有使用'checkout'來切換分支的例子.. – Dziamid 2010-06-29 06:54:48

2
git checkout <sha of old commit> 

然後,當你做,只是git checkout master或任何你想要的。

1

創建一個分離的頭在Jefromi的回答可能會做你想要什麼。

如果您告訴我們您的潛在動機,我們可以給您更多有用的答案。例如,如果有問題的承諾是一個顯著的里程碑,那麼也許你要標記它,給它一個有意義的名字:

git tag -a -m 'Release 1.0' v1.0 <sha1>

其他可能性:

  • 創建並切換到一個分支這一點
git checkout -b my-branch-name <sha1>
  • 查看特定文件的從內容提交
git show <sha1>:foo.c
  • 見已經改變了一切,因爲,在一個特定的文件
git diff <sha1> HEAD -- xyz.cpp