假設我已經做了很多次了。現在我想回到某個提交併查看當時我的工作目錄是什麼樣子的(當我這樣做時我真的希望我的工作目錄改變)。最後回到原來的頭,不搞亂我的提交?!用git走歷史嗎?
我知道這應該很容易做到,我似乎無法找到正確的命令。謝謝。
假設我已經做了很多次了。現在我想回到某個提交併查看當時我的工作目錄是什麼樣子的(當我這樣做時我真的希望我的工作目錄改變)。最後回到原來的頭,不搞亂我的提交?!用git走歷史嗎?
我知道這應該很容易做到,我似乎無法找到正確的命令。謝謝。
要簽出指定的提交,使用git checkout
:
git checkout <SHA1 of commit>
要返回到原來的分支,檢查出來:
git checkout master
一對夫婦的注意事項:
如果您有未提交的修改,結帳可能會失敗。您可能首先要提交或stash。
當你退房的東西不是一個分支,你最終在detached HEAD狀態;也就是說,你的HEAD並沒有提到一個分支 - 驚喜!這意味着特別是,如果您進行了提交,它將不在分支上。如果你想提交,請確保簽出分支。如果你的目的是使提交過你檢查出的一個,你可以檢查出來,並在同一時間創建一個分支:git checkout -b new-branch <SHA1 of commit>
git checkout <sha of old commit>
然後,當你做,只是git checkout master
或任何你想要的。
創建一個分離的頭在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
錯誤犯
@VonC:好的,在這種情況下不檢查單個文件,但是要點好。 – Cascabel 2010-06-28 17:59:30
是的,就是這樣。謝謝。我想知道爲什麼在git社區書中沒有關於它的消息。只有使用'checkout'來切換分支的例子.. – Dziamid 2010-06-29 06:54:48