为什么git fetch不做任何改变

时间:2012-08-27 22:39:48

标签: git merge

我想做git fetch而不是git pull。但是,当我进行取指时,它从未提及任何类似“此”文件需要合并或类似的东西。为什么会这样?如果我无法知道这些文件需要合并,那么git fetch解决的目的是什么?

2 个答案:

答案 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可以轻松尝试。不要害怕。