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

Adi*_*dil 16 git git-pull git-fetch

我正在学习如何通过阅读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
Run Code Online (Sandbox Code Playgroud)

还有以下命令:

$git log origin --oneline
$git log --oneline
Run Code Online (Sandbox Code Playgroud)

谢谢你支持我的愚蠢问题;-)

小智 15

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

git log可以--all选择显示所有分支,本地和远程的历史记录.或者,您可以显式列出远程分支,如git log origin/master.


jub*_*0bs 6

你写了

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

你似乎混淆了两个什么git loggit fetch做.

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

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

但是,您需要了解git fetch origin不会影响/更新您的本地分支,例如master.相反,来自origin(或从中获取的任何其他远程)的新提交被放入远程跟踪分支.

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

你可能想要的是跑步

git fetch origin
Run Code Online (Sandbox Code Playgroud)

从中获取所有新提交origin并将它们放入远程跟踪分支(包括origin/master,此处),然后

git log master..origin/master
Run Code Online (Sandbox Code Playgroud)

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