我正在学习如何使用Git遥控器阅读relevant section of the Pro Git Book。
如果克隆存储库,该命令会自动以名称“origin”添加该远程存储库。因此,git fetch origin
获取自您克隆(或最后从中获取)以来已推送到该服务器的任何新工作。
重要的是要注意git fetch
命令只将提取数据到本地存储库;它不会自动将其与您的任何工作合并或修改您当前正在处理的工作。您准备好后,必须手动将其合并到您的工作中。
这是我尝试过的。我克隆了一个存储库并编辑了一个文件。 在原始存储库中,有人更新了同一个文件并推送。 然后,
我跑了git fetch
。
它显示了一些更新进度消息。但是,git log
未显示该更新。我误解了git fetch
的作用了吗?我错过了什么吗?
我跑了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
感谢您提出我的愚蠢问题;-)
答案 0 :(得分:14)
默认情况下,git log
显示当前分支的日志。由于在没有合并的情况下进行提取不会更改当前(本地)分支中的任何内容,因此git log
输出不会更改。
git log
可以使用--all
选项显示所有分支(本地和远程)的历史记录。或者,您可以在git log origin/master
。
答案 1 :(得分:6)
你写了
但是,git log没有显示更新。我误解了git fetch的功能吗?我错过了什么吗?
您似乎对git log
和git 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 fetch
和git 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