我想做git fetch而不是git pull。但是,当我进行取指时,它从未提及任何类似“此”文件需要合并或类似的东西。为什么会这样?如果我无法知道这些文件需要合并,那么git fetch解决的目的是什么?
答案 0 :(得分:4)
要扩展anio的正确答案,git fetch
会更新所谓的远程跟踪分支。您可以将远程跟踪分支视为远程服务器上的代理的代理。例如,假设您在克隆存储库时,其中有三个提交:
+----------------------------------+
| Remote repository (origin): |
| master: A-B-C |
+----------------------------------+
+-------------------------------------------------------+
| Your repository: |
| remotes/origin/master: A-B-C (remote tracking branch) |
| master: A-B-C (your working branch) |
+-------------------------------------------------------+
现在让我们说有人做了并推动了一些工作,比如提交D和E.现在图片看起来像这样:
+----------------------------------+
| Remote repository (origin): |
| master: A-B-C-D-E |
+----------------------------------+
+-------------------------------------------------------+
| Your repository: |
| remotes/origin/master: A-B-C (remote tracking branch) |
| master: A-B-C (your working branch) |
+-------------------------------------------------------+
请注意,您的存储库没有更改;对远程存储库的更改不会自动推送到您的存储库。但是,如果您执行git fetch
,它将仅更新您的远程跟踪分支:
+----------------------------------+
| Remote repository (origin): |
| master: A-B-C |
+----------------------------------+
+-----------------------------------------------------------+
| Your repository: |
| remotes/origin/master: A-B-C-D-E (remote tracking branch) |
| master: A-B-C (your working branch) |
+-----------------------------------------------------------+
请注意您的远程跟踪分支现在具有来自远程存储库的所有最新信息,但您的工作分支尚未更新,因为这样做需要合并(在这种情况下是快进合并,因为您还没有工作)。
这就是git fetch
所做的一切;它只更新远程跟踪分支,它不会告诉你将要合并的内容。要查看将要合并的内容,请参阅anio提到的链接(How can I preview a merge in git?)。
答案 1 :(得分:1)
git fetch下载更改但不进行合并。 git pull做到了。你想预览git merge会做什么吗?然后看到这个:How can I preview a merge in git?
由于撤消失败的git合并是如此简单,我个人只是做一个git merge并看看我得到了什么冲突。合并的大部分时间都非常好。如果我遇到太多冲突或改变主意,很容易撤消git merge:
git reset --hard HEAD
Git可以轻松尝试。不要害怕。