2012-07-20 176 views
4

我錯過了一些東西。我曾經使用過Mercurial,並會使用hg log來查看回購的修訂歷史記錄。簡單:全部顯示有史以來在回購中所做的變更集。git log告訴我什麼?

現在我使用的是git。我對學習新工具感到非常興奮,但我對git log的看法感到困惑。我做了一些改變並做了一些提交。另一個人已經創建了一個修訂並承諾。我從他的存儲庫中取出。我做了一個git log和他的變更(也許它在git中稱爲「提交」)不在列表中。如果我明確列出了他的散列號(即git log <hash>),它會顯示在頂部。所以它在我的回購,但我不明白如何git決定告訴我它是什麼時,我打電話git log

我看了git help log,但它在描述中說「它顯示提交日誌」。從我的角度來看,這是不正確的。或者可能不完整,因爲實際上它顯示了它們的一部分。但我不知道哪個子集,也不知道它如何決定展示什麼。

有人可以向我解釋git log嗎?

更新

BTW:有一個問題我試過的第一件事就是 - 所有的,我現在看到很多人建議它。但是,這並不表明它要麼:

$ git log | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log --all | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log fb2a17c5fb08498e7f2ab364931fddc379be106f | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
commit fb2a17c5fb08498e7f2ab364931fddc379be106f 
+0

我不相信我可以解釋'git log',但我有'git gl'別名到'git log --graph --all --decorate --sparse'。這與Mercurial的帶有圖形日誌擴展的'hg gl'功能密切相關,但不完全相同。 – laffoyb 2015-02-26 16:47:42

回答

11

當您未指定參考或參考集時,git log存在隱含參數。這是目前的頭。所以

git log 

擴展到

git log HEAD 

這意味着顯示我的所有當前磁頭到達的提交(在您下次提交將連接)。

爲了看到你的同事的工作,你可以

git log origin/master 

假設你都努力掌握你已經取出。

在git中,獲取意味着從遠程獲取提交,但不更新我的任何本地分支git pull會執行提取操作,然後將您的分支與其提取的內容合併。獲取,檢查所做的事情,然後合併或重新設定甚至拒絕使用強制推送完成的工作是一個好主意 - 取決於情況和工作流程。

一般,看看發生了什麼之後,取你可以

git log ..origin/master 

這真的擴大到

git log HEAD..origin/master 

..運營商短手結合遙控器上完成「排除可達提交此引用「和」包含來自此引用的可達提交「。因此,它也可以寫成這樣:

git log ^HEAD origin/master 

^在基準工具開始排除提交從這裏到達。在這種情況下,它意味着你可以從哪裏進入。結果將是從服務器獲取的該分支上的提交列表。

而是所有分支機構和遠程分支機構作爲參數掛牌git log,你可以只使用--all參數:

git log --all 

這將顯示來自所有分支(本地和遠程跟蹤)和標籤提交可達。

git log是一個非常強大的命令,因爲它可以讓你基於集合的方式減少你想要查看的內容。 ..是一個很好的語法知識。還有...其中包含從兩個分支指定到其共同祖先的提交。

歷史的這一步使git如此強大,並且能夠支持如此多有趣的工作流程。

UPDATE:

當遇到的git提交,在什麼是包含在它存儲在那裏的樹方面是相同的父,它不會列出當它走合併的提交。

git log --all --sparse 

不會排除這些提交。

看到的http://linux.die.net/man/1/git-log

歷史簡單化節這也意味着您重置分支或您的朋友做,並再次獲取已經失去了參考。當你用sha1做git日誌時,如果你添加了--decorate它,輸出是什麼?另請嘗試git log --walk-reflogs

+0

感謝您的回答。我更新了這個問題 - 請注意,git log --all並不顯示我正在尋找的修訂版本。當我明確地將它傳遞給日誌時,它顯示出來。 – firebush 2012-07-20 19:59:52

+0

git log有時會隱藏相同的提交。如果樹相同,它將不會列出它。添加'--sparse'參數以列出這些參數。 – 2012-07-20 20:07:23

0

git log沒有任何進一步的明確的參數顯示你的歷史提交您目前已簽出。如果你想看看其他分支或提交,你必須告訴git log你想看什麼。

git log --all 

應顯示所有分支機構的所有修訂。

有很多很好的教程,容易谷歌搜索。

0

你是對的---默認情況下,git log只顯示提交的一個子集。默認情況下,git log只顯示當前分支的提示中可見的提交。你的朋友的提交不在你當前的分支中,所以它不會顯示在git log中。

+0

當處於分離頭模式時,您沒有當前分支。 – 2012-07-20 19:11:13