kingBook

导航

git pull 与 git fetch

git pull:
官方说明:https://git-scm.com/docs/git-pull
git pull 作用是将远程仓库中的更改合并到当前分支中
格式:

git pull [<options>] [<repository> [<refspec>…​]]

默认模式下,相当于 git fetch + git merge FETCH_HEAD 命令。
更准确的说是,git pull 相当于: 先执行git fetch + 指定参数,然后执行git merge 命令将检索到的分支合并到当前分支。
下面是git pull的过程:
1.git fetch origin master 先拉取,让本地的origin/master先更新到最新。

            A---B---C master on origin
          /
        D---E---F---G master

2.git merge origin/master

             A---B-----C     origin/master
           /             \
         D---E---F---G--- H    master

解决git pull与本地文件冲突。

出错信息如下:

error: Your local changes to 'c/environ.c' would be overwritten by merge.  Aborting.
Please, commit your changes or stash them before you can merge.

1.将本地修改暂存起来。

git stash
//可以看到stash@{0}.... 暂存的信息

2.pull把远端内容下载下来。

git pull origin master

3.合并暂存内容的冲突部分到文件。

git stash pop stash@{0}
//会提示冲突的文件

4.解决文件中冲突的部分
依次打开上一步提示的冲突文件,会看到标记出来的冲突内容,修改后就可以提交了


git fetch:

  • git fetch <remote> fetch仓库中所有分支。例:git fetch origin
  • git fetch <remote> <branch> fetch指定的分支。例:git fetch origin develop
  • git fetch --all fetch所有已注册过的远端仓库的全部分支。

例:使用 git fetch 同步 origin

git fetch origin 

执行后输出会显示被下载到本地的所有分支

a1e8fb5..45e66a4 main -> origin/main
a1e8fb5..9e8ab1c develop -> origin/develop

下图方块表示远端分支的commits,圆形代表的本地分支commits。
image

  • 查看上游main分支有哪些新增加的commits,可以执行如下git log命令,传入origin/main作为过滤参数:

    git log --oneline main..origin/main
    
  • 可以通过下面的命令查看本地分支与远程仓库分支上的提交差异:

    # 切换到想查看差异的分支
    git checkout main 或 git switch main
    
    # 打印提交差异
    git log origin/main
    
  • 确认没问题后,使用以下命令合并来自远程仓库的变更

    git merge origin/main
    

posted on 2020-08-07 10:32  kingBook  阅读(205)  评论(0编辑  收藏  举报