为什么git log在git fetch之后没有显示任何新内容?

时间:2015-07-02 07:16:10

标签: git git-pull git-fetch

我正在学习如何使用Git遥控器阅读relevant section of the Pro Git Book

如果克隆存储库,该命令会自动以名称“origin”添加该远程存储库。因此,git fetch origin获取自您克隆(或最后从中获取)以来已推送到该服务器的任何新工作。

重要的是要注意git fetch命令只将提取数据到本地存储库;它不会自动将其与您的任何工作合并或修改您当前正在处理的工作。您准备好后,必须手动将其合并到您的工作中。

这是我尝试过的。我克隆了一个存储库并编辑了一个文件。 在原始存储库中,有人更新了同一个文件并推送。 然后,

  1. 我跑了git fetch。 它显示了一些更新进度消息。但是,git log未显示该更新。我误解了git fetch的作用了吗?我错过了什么吗?

  2. 我跑了git pull,我得到了

  3.   

    错误:您对“hello_world.c”的本地更改将被合并覆盖。中止。   请在合并之前提交更改或存储更改。

    在这里,我相信它也在合并并避免意外数据丢失,它会中止。

    修改 谢谢你的回答。实际上,在查看答案之前,我正在尝试自己并通过以下命令/输出实现相同的目标:

    $ 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
    

    感谢您提出我的愚蠢问题;-)

4 个答案:

答案 0 :(得分:14)

默认情况下,git log显示当前分支的日志。由于在没有合并的情况下进行提取不会更改当前(本地)分支中的任何内容,因此git log输出不会更改。

git log可以使用--all选项显示所有分支(本地和远程)的历史记录。或者,您可以在git log origin/master

中明确列出远程分支

答案 1 :(得分:6)

你写了

  

但是,git log没有显示更新。我误解了git fetch的功能吗?我错过了什么吗?

您似乎对git loggit fetch所做的事情感到困惑。

假设当前检出了一个名为master的分支 - 你也可能处于分离-HEAD状态,但是为了解释这一点,让我们保持简单 - 命令git log没有任何其他参数,相当于git log master。这个命令告诉Git

  

显示本地master分支的祖先中的所有提交。

但是,您需要了解git fetch origin不会影响/更新您的本地分支,例如master。相反,来自origin(或您提取的任何其他远程)的新提交都会放入remote-tracking branches

远程跟踪分支是特殊本地分支,其唯一目的是反映上次与服务器通信时生活在远程存储库中的分支的状态。特别是,您不能提交此类型的分支。

你可能想要的是运行

git fetch origin

origin获取所有新提交并将其置于远程跟踪分支(包括origin/master,此处),然后

git log master..origin/master

显示远程master分支上添加的所有“新”提交的日志,即您知道为origin的远程服务器上的分支,您的远程跟踪分支origin/master跟踪。

答案 2 :(得分:4)

git fetch之后,您的本地仓库知道远程仓库的更改,但尚未将它们应用到您当地的分支机构。

没有附加参数的

git log显示当前分支的日志 - 而您尚未将远程更改合并到该分支中。

git pull执行git fetchgit merge FETCH_HEAD

您的错误消息表示您的本地仓库中存在未提交的更改。您可以提交或存储它们(如消息所述)并再次尝试merge(或pull)。

答案 3 :(得分:1)

您的本地分支机构永远不会从抓取中获得更新,只有跟踪分支机构才会更新,另一方面git pull会这样做,

git pull = git fetch + git merge

您在git log中看不到任何更新只是因为您在错误的分支上运行它,只需git fetch查看您的更改,然后您需要git log在右边的分支上,在你的情况下是

git log origin/master