Git中fetch和pull命令的区别

两者具体的区别

  • fetch
    Git中的fetch命令是将远程分支的最新内容拉到了本地,但不立即将远程分支的变更合并到本地分支上。当我们执行完fetch命令后,在执行git branch命令会发现此时后本地多了一个FETCH_HEAD的分支。我们可以checkout到该分支查看远程分支的最新内容。以便于我们有机会查看远程分支都做了什么改动。
    当我们检查完成后在checkout回本地分支执行merge命令进行合并。合并后如果出现冲突则需要我们手动解决冲突,然后在commit一次。

  • pull
    pull的相当于fetch和merge的这两步操作,Git底层帮我们实现了:

git fetch origin master
git merge FETCH_HEAD
  
  
  • 1
  • 2

如果存在冲突,同样需要我们自己手动解决冲突,解决完成后再一次进行commit操作。

Tip-1: 理解git fetch的关键是理解FETCH_HEAD,FETCH_HEAD指的是:某个分支在服务器上的最新状态。

Tip-2:在进行 fetch 操作时可能存在2种情况:

  1. 如果没有显示地指定远程分支,则远程的master分支将作为默认的FETCH_HEAD。
git fetch origin
  
  
  • 1

相当于

git fetch origin master
  
  
  • 1
  1. 如果指定了远程分支,则将指定的远程分支作为 FETCG_HEAD。如:
git fetch origin dev
  
  
  • 1

设定当前分支的 FETCG_HEAD 为远程服务器的dev分支。相当于git pull origin dev的第一步(但并不会在本地创建新的分支)。

使用Fetch命令来嗅探远程分支是否存在

例如我们使用fetch命令来测试远程分支dev是否存在。

git fetch origin dev :local_branch
  
  
  • 1

上面这个命令的执行过程如下:

  1. 首先执行上面的fetch操作
  2. 使用远程dev分支在本地创建local_branch分支(但不会切换到该分支)
  3. 如果本地不存在 local_branch 分支,则会自动创建一个新的 local_branch 分支; 如果存在 local_branch 分支,并且是fast forward,则会自动合并这2个分支,否则进行任何操作。

概念补充

  • Git中分支的概念:
    分支是用来标记特定代码的提交,每一个分支通过SHA1 sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1 sum值。

如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。

A----C----E(master)
 \
  B---D---F(dev)
  
  
  • 1
  • 2
  • 3

它们的head指针分别指向E和F,对上述做如下操作:

git checkout master
git merge dev
  
  
  • 1
  • 2

之后的情形是这样的:

A---C---E---G(master)
 \         /
  B---D---F(dev)
  
  
  • 1
  • 2
  • 3

现在A,B, C, D, E, F, G属于master,G是一次合并后的结果,是将 E 和 F 的代码合并后的结果,可能会出现冲突。而A, B,D, F依然属于dev分支。可以继续在dev的分支上进行开发:

A---C---E---G---H(master)
 \         /
  B---D---F---I(dev)
  
  
  • 1
  • 2
  • 3
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
                                            <div class="more-toolbox">
            <div class="left-toolbox">
                <ul class="toolbox-list">
                    
                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">点赞</span>
                    <span class="count"></span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打赏开始-->
                                            <!--打赏结束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章举报</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/shenlei19911210">
                <img src="https://profile.csdnimg.cn/2/2/F/3_shenlei19911210" class="avatar_pic" username="shenlei19911210">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/2x/8.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/shenlei19911210" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">SerenoShen</a></span>
                                        </div>
                <div class="text"><span>发布了106 篇原创文章</span> · <span>获赞 79</span> · <span>访问量 46万+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://bbs.csdn.net/topics/395534155" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板
                    </a>
                                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>
发布了45 篇原创文章 · 获赞 0 · 访问量 3531

两者具体的区别

猜你喜欢

转载自blog.csdn.net/qq_44813090/article/details/104214398