git merge和git fetch的区别?

时间:2017-03-21 12:27:06

标签: git

' git merge'有什么区别?并且' git fetch'? 我对这两个命令有一些问题。 我不知道何时应该使用其中一种。

2 个答案:

答案 0 :(得分:2)

更新 - 好悲伤,我的合并图一直都是错的。合并不会移动"其他"分支机构的参考...

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

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

git pull(我知道您没有询问pull但是请耐心等待我)是一种从远程检索数据的简写,如fetch,然后是{{1}从您的当前分支到远程的相应工作线(如果有的话;"跟踪信息"确定这一点。)

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

master

前一段时间你克隆了这个回购;当时只有第一次提交('origin' repo A --- B --- C --- D --- E <--(master) )。然后,您创建了一个新分支(A)并做了一些工作,在该分支上创建了一个新的提交(branch1)。最后,你从遥控器中取出了变化;更多关于以后的工作原理,但现在让我们更新您的L以包含master

B

请注意,除了本地分支引用(local repo A --- B <--(master)(origin/master) \ L <-- (branch1) master)之外,您还有一个远程分支引用(branch1),目前恰好与{ {1}}。

现在,如果你想更新你的本地仓库以包含来自原产地的所有数据,但没有合并任何东西,你会说

origin/master

然后你有

master

这是一次获取 - 只需从遥控器获取数据。

您明确要求git fetch 的主要原因是将 C --- D --- E <--(origin/master) / A --- B <--(master) \ L <-- (branch1) 的工作与merge合并。所以

branch1

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

master

(在某些情况下 - 只有一个分支包含不在另一个分支中的变化 - 合并可以通过&#34;快进&#34;;但不适用这里因为每个分支都有变化 - 即分支有分歧。另外还有另一种称为 rebasing 的技术,它有时可以用来组合分支;但是那个&#39另一种蠕虫......)

这就是git checkout master git merge branch1 C --- D --- E <--(origin/master) / A --- B --- M <--(master) \ / L ------- <--(branch1) 之间的区别 - 执行不同操作的非常不同的操作。但我也提到fetch哪种结合了两者。如果您执行merge,首先它会从远程执行更改(如果您没有使用pull完全更新),然后如果当前分支具有相应的远程分支,则会合并它们。

pull

给出类似

的内容
fetch

(请注意,虽然我通常绘制这些图表,以便&#34;直线&#34;进入合并是&#34;第一个父亲&#34;,在这种情况下这对# still on master git pull 来说很麻烦;但这确实显示了一般的提交拓扑......)

当我谈到&#34;拉动变化&#34;要将 C --- D --- E --- N <--(master)(origin/master) / / A --- B --------------- M \ / L ------------------- <--(branch1) 放入您的本地仓库,可能会使用N

完成

答案 1 :(得分:1)

git fetch将下载源树以检查更改,git merge将您当前的分支与另一个分支连接。