2015-07-02 53 views
10

我正在通過閱讀relevant section of the Pro Git Book瞭解有關使用Git遙控器的信息。爲什麼git log在git fetch之後沒有顯示任何新東西?

如果您克隆存儲庫,該命令會自動將該遠程存儲庫添加到名稱「origin」下。因此,git fetch origin可以獲取自克隆(或從上次獲取)以來推送到該服務器的所有新作品。

重要的是要注意,git fetch命令只有將數據提取到本地存儲庫;它不會自動將其與您的任何工作合併或修改您目前的工作。準備就緒後,您必須將其手動合併到您的工作中。

這是我試過的。我克隆了一個存儲庫並編輯了一個文件。 在原始存儲庫中,有人更新了相同的文件並推送。 然後,

  1. 我跑git fetch。 它顯示了一些更新進度消息。但是,git log未顯示該更新。我誤解了git fetch的功能嗎?我錯過了什麼嗎?

  2. 我跑git pull,和我

error: Your local changes to 'hello_world.c' would be overwritten by merge. Aborting. Please, commit your changes or stash them before you can merge.

在這裏,我相信它也合併和避免意外的數據丟失,它將中止。

編輯: 感謝您的答案。在尋找答案之前,其實,我是想自己,實現用下面的命令/輸出相同:

$ git ls-remote origin 
d0006a6bfa95e0e90aa820a0e50d31a548625652 HEAD 
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/heads/master 
$ git ls-remote . 
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431 HEAD 
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431 refs/heads/master 
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/remotes/origin/HEAD 
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/remotes/origin/master 

還與以下命令:

$git log origin --oneline 
$git log --oneline 

感謝您對我的愚蠢的問題軸承; - )

+1

* [...] git fetch命令將數據提取到本地存儲庫[...] *小心使用術語「拉」;它在Git中有着非常明確的含義,並且使用它的方式只會導致混淆。 – Jubobs

回答

7

默認情況下,git log顯示當前分支的日誌。由於不合並提取不會改變當前(本地)分支中的任何內容,因此git log輸出不會更改。

git log可以採取--all選項來顯示所有分支,本地和遠程的歷史。或者,您可以像在git log origin/master中那樣明確列出遠程分支。

4

git fetch之後,您的本地倉庫知道遠程倉庫的變化,但尚未將它們應用到您當地的分支機構。

git log沒有附加參數顯示當前分支的日誌 - 並且您尚未將遠程更改合併到該分支中。

git pull確實git fetchgit merge FETCH_HEAD

您的錯誤消息表示您的本地回購存在未提交的更改。您可以提交或存儲它們(如消息所述)並再次嘗試merge(或pull)。

4

你寫

However, git log did not show that update. Did I misunderstand what git fetch does? Am I missing something?

你似乎是無所適從都git loggit fetch做。

假設當前檢出一個名爲master的分支(您也可能處於detached-HEAD狀態,但讓我們保持簡單,出於此解釋的緣故),命令git log(沒有任何其他參數)相當於git log master。這個命令告訴Git的

Show me all the commits that are in the ancestry of the local master branch.

但是,你要明白,git fetch origin不會影響/更新您的本地分支,如master。相反,origin(或您從中獲取的任何其他遠程)的新提交將放入remote-tracking branches

遠程跟蹤分支機構特殊本地分行,其唯一目的是反映您最後一次與服務器通信時居住在遠程存儲庫中的分支機構的狀態。特別是,你不能提交這種類型的分支。

你可能想要的是運行

git fetch origin 

origin獲取所有新的提交,並將它們放入遠程跟蹤分支(包括origin/master,在這裏),然後

git log master..origin/master 

到顯示在遠程master分支上添加的所有「新」提交的日誌,即生活在遠程服務器上的分支,您知道該遠程服務器爲origin,遠程跟蹤分支origin/master將跟蹤該分支。

+0

感謝您的編輯和回答:) – Adil

1

你的地方分支機構永遠不會從更新獲取,只有跟蹤樹枝做,git pull,另一方面呢,

git pull = git fetch + git merge

你不能看到git log只是任何更新因爲你運行在錯誤的分支上,只看到你的變化git fetch然後你需要git log在右邊的分支,你的情況是

git log origin/master