【问题标题】:Why does git log not show anything new after git fetch?为什么 git log 在 git fetch 之后不显示任何新内容?
【发布时间】:2015-09-19 14:07:42
【问题描述】:

我正在通过阅读relevant section of the Pro Git Book 了解如何使用 Git 遥控器。

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

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

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

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

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

错误:您对“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

感谢您接受我的愚蠢问题 ;-)

【问题讨论】:

  • [...] git fetch 命令将数据拉取到本地存储库 [...] 注意“拉取”一词;它在 Git 中具有非常特定的含义,并且以您的方式使用它只会导致混乱。

标签: git git-pull git-fetch


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你写的

    但是,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跟踪。

    【讨论】:

      【解决方案3】:

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

      git log 不带附加参数显示当前分支的日志——你还没有将远程更改合并到该分支中。

      git pull 执行 git fetchgit merge FETCH_HEAD

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

      【讨论】:

        【解决方案4】:

        您的本地分支永远不会从获取中更新,只有跟踪分支会更新,另一方面 git pull 会更新,

        git pull = git fetch + git merge

        您在 git log 中看不到任何更新,因为您在错误的分支上运行它,要从 git fetch 看到您的更改,那么您需要在正确的分支上 git log,这在您的情况是

        git log origin/master
        

        【讨论】:

          猜你喜欢
          • 2021-04-10
          • 1970-01-01
          • 1970-01-01
          • 2017-06-06
          • 2017-06-08
          • 2015-08-26
          • 2020-11-10
          • 2011-06-11
          • 2020-12-18
          相关资源
          最近更新 更多