【问题标题】:Difference between git merge and git fetch? [duplicate]git merge 和 git fetch 的区别? [复制]
【发布时间】:2017-08-13 02:54:38
【问题描述】:

“git merge”和“git fetch”有什么区别? 我对这两个命令有一些问题。 我不知道什么时候应该使用其中一个。

【问题讨论】:

  • git fetch 使用自上次获取以来已添加到服务器的提交更新您的本地存储库,而 git merge 将尝试结合两个并行开发路径。他们完全不同。您是否考虑过阅读有关 git 的众多教程之一或 Pro Git 书籍(免费提供 online)?

标签: git


【解决方案1】:

更新 - 很遗憾,我的合并图一直都是错误的。合并不会移动“其他”分支的引用...


git fetch 是关于从远程存储库中检索数据。

git merge 是关于将多行工作(通常是本地分支机构,但见下文)的工作结合起来。

git pull(我知道你没有问过pull,但请耐心等待)是从远程检索数据的速记,如fetch,然后merges 进入您当前分支的相应行远程工作(如果有的话;“跟踪信息”决定了这一点。)

例如,假设您有一个包含 5 个提交的单个分支 (master) 的远程存储库。

'origin' repo

A --- B --- C --- D --- E <--(master)

不久前你已经克隆了这个 repo;当时只有第一个提交(A)在其中。然后,您创建了一个新分支 (branch1) 并做了一些工作,在该分支上创建了一个新提交 (L)。最后,您从遥控器中提取了更改;稍后会详细了解它的工作原理,但现在让我们假设您更新了 master 以包含 B

local repo

A --- B <--(master)(origin/master)
 \
  L <-- (branch1)

请注意,除了您的本地分支引用(masterbranch1)之外,您还有一个远程分支引用(origin/master),目前恰好与 master 相同。

现在,如果您想更新本地存储库以包含来自源的所有数据,但不合并任何内容,您会说

git fetch

然后你就有了

        C --- D --- E <--(origin/master)
       /
A --- B <--(master)
 \
  L <-- (branch1)

这是一个获取 - 只需从远程获取数据。

您明确要求merge 的主要原因是将branch1 的工作与master 结合起来。所以

git checkout master
git merge branch1

(然后可能解决任何冲突),你现在有

        C --- D --- E <--(origin/master)
       /
A --- B --- M <--(master)
 \         /
  L ------- <--(branch1)

(在某些情况下 - 只有一个分支包含另一个分支中没有的更改 - 可以通过“快进”完成合并;但这不适用于这里,因为每个分支都有更改 - 即分支有发散。还有另一种称为rebaseing的技术,有时可以用来组合分支;但那是另一种蠕虫......)

这就是fetchmerge 之间的区别——非常不同的操作做不同的事情。但我也提到了pull 哪种结合了两者。如果您执行pull,首先它会从远程拉取更改(以防您尚未完全使用fetch 进行更新),然后如果当前分支有对应的远程分支,则合并它们。

# still on master
git pull

给出类似的东西

        C --- D --- E --- N <--(master)(origin/master)
       /                 /
A --- B --------------- M 
 \                     /
  L ------------------- <--(branch1)

(请注意,虽然我通常绘制这些图表,使得进入合并的“直线”是“第一个父级”,在这种情况下,N 变得很麻烦; 但这确实显示了一般的提交拓扑......)

当我谈到“引入更改”以将 B 放入本地存储库时,很可能已经使用 git pull 完成

【讨论】:

    【解决方案2】:

    git fetch 将下载源代码树以检查更改,git merge 将您当前的分支加入另一个分支。

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 2021-03-19
      • 2016-11-10
      • 2017-06-30
      • 2021-08-17
      • 2014-02-27
      • 2019-04-11
      • 2018-04-11
      • 2012-02-22
      相关资源
      最近更新 更多