git_fetch

git fetch命令用于从另一个版本库中获取分支和/或标签(统称为引用), 以及重现其历史所必须的对象.

默认情况下, 会获取指向历史记录的所有标签, 可以使用--tags--no-tags选项来改变此默认行为.

注解

使用git fetch获取分支, 并不是只获取当前的commit, 而是会将当前分支的历史一同获取.

基本语法:

# <repo>可以以shortname或URL的形式给出
git fetch <repo> <branch>/<tag>
  • FETCH_HEAD表示最近一次通过git fetch取回的分支;

    git log FETCH_HEAD
    
  • git fetch <repo>

    # 省略<branch>, 表示取回指定远程仓库上的所有分支
    # 从ref/heads/命名空间复制所有分支, 将它们保存在本地的refs/remotes/<repo>命名空间中
    git fetch <repo>
    
  • git fetch

    # 省略<repo>, 默认表示取回origin上的所有分支
    git fetch
    
  • 取回的远程分支存放在命名空间.git/refs/remotes/<repo>下;

    使用git branch -a/-r时, 在remotes命名空间下的分支表示远程分支.

    ../../_images/remote_branches.png
  • 将远程分支取回本地后, 可以像本地分支一样操作.

    • 从远程分支创建一个新的分支;

      git checkout -b newBranch origin/master
      
    • 可以使用git mergegit rebase命令, 在本地分支上合并远程分支.

      git merge origin/master
      # 或
      git rebase origin/master