2010-03-11 64 views
302

我有時會檢查一些以前版本的代碼來檢查或測試。如果我想修改之前的提交,我已經看到了怎麼做的說明 - 但假設我沒有做任何更改。完成後,例如git checkout HEAD^,我該如何回到分支的頂端?git log不再顯示我最新提交的SHA。如何在檢出以前的提交後返回到最新的提交?

+3

關於'混帳log'句子你可以運行'git log --all'(或者更有用的'git log --oneline --graph --all')。 – Wildcard

回答

385

如果你知道你想回到提交一些部門的負責人,或者被標記,那麼你可以

git checkout branchname 

你可以還使用git reflog來查看過去您的HEAD(或任何其他參考)指出的其他提交內容。


編輯補充:

在Git中的新版本,如果你只跑了git checkout或別的東西將您HEAD一次,你也可以做

git checkout - 

切換回無論在最後一次結賬之前。這是由類比外殼成語cd -回去任何工作目錄中的一個動機是以前。

+15

我想提一下,典型的例子是「git checkout master」。我學習使用git時遇到的一個困難是不知道我實際上可以用什麼特定的關鍵字(例如「主」)來代替「branchname」這樣的佔位符詞。 – AbePralle

+3

'master'並不是真正的任何關鍵字,'HEAD'的方式。它只是新存儲庫中的默認分支名稱。您可以運行'git branch'來獲取存儲庫中的分支列表,'git tag -l'獲取標籤列表。同樣,'origin'是存儲庫克隆的遠程的默認名稱,但沒有什麼特別之處。 – Novelocrat

+3

如果不清楚,'git reflog'會給你一個散列列表,在這一點上你可以使用'git checkout [commit-hash]'。 – jbnunn

6

看看圖形用戶界面... gitk它顯示所有提交。有時它是更容易的工作圖形... ^^

+0

是的,這實際上是我以前做過的 - 但我目前沒有可用的GUI –

19

git的結帳主

師傅一角,或最後一次提交。 gitk只會顯示您當時在樹中的位置。 git reflog將顯示所有提交,但在這種情況下,您只需要提示,所以git checkout master。

+0

gitk --all顯示所有提交。 – Kharoof

11

過這個問題就來了剛纔的事,並添加

要轉到最近承諾:

git checkout $(git log --branches -1 --pretty=format:"%H") 

說明:

git log --branches顯示提交的日誌從所有本地分支
-1限制爲一次提交→最近提交
--pretty=format:"%H"格式,只顯示提交哈希殼層的
git checkout $(...)使用輸出參數用於結帳

注:

這將導致雖然一個分離的頭(因爲我們直接結帳提交)。這可以通過使用sed提取分支名稱來避免,如下所述。


要到最近的分公司提交:

git checkout $(git log --branches -1 --pretty=format:'%D' |sed 's/HEAD -> \|tag: [^,]*\|,.*//g') 

說明:

git log --branches顯示提交的日誌從所有地方分公司
-1限制一個提交→最近的提交
--pretty=format:"%D"格式,只顯示裁判的名字
|sed 's/HEAD -> \|tag: [^,]*\|,.*//g'忽略HEAD,標籤和提取第一多個分支名稱
殼層的 git checkout $(...)使用輸出參數用於結帳

注:

這將始終只如果該提交有多個,則使用第一個分支名稱。


無論如何,我認爲最好的解決辦法只是爲最近顯示裁判的名字提交知道在哪裏簽到:

git log --branches -1 --pretty=format:'%D' 

例如爲該命令創建別名git top

3

您可以使用此以下的Git命令之一:

git checkout master 
git checkout branchname 
-2

如果您最新提交是在主分支,你可以簡單地使用

git checkout master 
+1

歡迎來到SO。不建議發佈已提交的答案。這個解決方案已經提到了很多次。 – AChampion

相關問題