git merge和git fetch之间的区别?

这个问题在这里已经有了答案:

  • 'git pull'和'git fetch'有什么区别? 40个答案

  • 更新 - 好悲伤,我的合并图整个过程都是错误的。 合并不会移动“其他”分支的ref ...


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

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

    git pull (我知道你没有问过关于pull但是忍受着我)是一种简单的方式,从远程获取数据,如fetch ,然后merge s merge到你当前的分支中,从远程(如果有的话) “跟踪信息”确定了这一点。)

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

    'origin' repo
    
    A --- B --- C --- D --- E <--(master)
    

    前一阵子你已经克隆了这个回购; 当时只有第一次提交( A )。 然后创建了一个新的分支(分支branch1 )并做了一些工作,在该分支上创建了一个新的提交( L )。 最后,你已经从遥控器中取得了变化; 更多关于稍后如何工作的内容,但现在让我们假设你已经更新了包含Bmaster

    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将是你的工作从结合branch1master 。 所以

    git checkout master
    git merge branch1
    

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

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

    (在某些情况下 - 只有一个分支包含不在另一个分支中的变化 - 可以通过“快进”来完成合并;但这不适用于此,因为每个分支都有变化 - 即分支已经分支还有另一种叫rebasing的技术,有时可以用来组合分支,但那是另一种蠕虫......)

    所以这就是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来完成


    git fetch会下载源码树来检查更改,而git merge会将你当前的分支与另一个分支联系起来。

    链接地址: http://www.djcxy.com/p/1193.html

    上一篇: Difference between git merge and git fetch?

    下一篇: Pull only unchanged files in Git