【问题标题】:Git pull/fetch with refspec differencesGit pull/fetch 与 refspec 差异
【发布时间】:2011-11-02 09:40:33
【问题描述】:

使用 refspec 是一种获取远程分支并创建一个类似但具有给定名称的分支的便捷方法(或相反:创建一个具有不同于本地名称的给定名称的远程分支)。我对一件小事感到困惑 - 因为 pull 也会与当前分支合并,所以我预计会有不同的行为:

git fetch origin master:mymaster

git pull origin master:mymaster

上述两个命令似乎产生完全相同的结果 - 即一个名为 mymaster 的本地分支,与 origin/master 相同。我是对的还是两者之间有模糊的区别?

最后,使用 refspec 会创建一个 local 分支 而不是 tracking 分支,对吧?因为当一个人在没有任何参数的情况下调用 git push AFAIK 时会自动推送跟踪分支

【问题讨论】:

  • 真的会是完全相同的结果吗?我希望pullorigin/master 合并到本地master

标签: git git-pull git-fetch


【解决方案1】:

一个 refspec 只是一个源/目标对。使用 refspec x:yfetch 告诉 git 在这个 repo 中创建一个名为“y”的分支,它是远程 repo 中名为“x”的分支的副本。没有别的了。

使用pull,git 在顶部抛出一个合并。首先,使用给定的 refspec 完成获取,然后将目标分支合并到当前分支中。如果这令人困惑,这里是一步一步的:

git pull origin master:mymaster
  1. 转到原点并获取分支“master”
  2. 在本地创建一个名为“mymaster”的副本
  3. 将“mymaster”合并到当前分支中

完全合格,即refs/heads/mymasterrefs/heads/master。为了比较,git 在克隆上设置的默认 refspec 是+refs/heads/*:refs/remotes/origin/*refs/remotes 为保持远程分支与本地分支分开提供了一个方便的命名空间。您正在做的是告诉 git 将远程跟踪分支放在与本地分支相同的命名空间中。

至于“跟踪分支”,这只是配置文件中的一个条目,告诉 git 默认在哪里拉取和推送本地分支。

【讨论】:

    【解决方案2】:

    git fetch origin master:mymaster 通过从远程存储库的 master 分支获取更新本地存储库中的分支 mymaster。

    git pull origin master:mymaster 执行上述操作并将其合并到当前分支中。

    【讨论】:

      【解决方案3】:

      git fetch origin master:mymaster

      但是,该命令必须严格满足以下两个条件:

      1. 本地当前分支不能是mymaster。

      2. 本地 mymaster 分支是 origin/master 的祖先。

      然后将进行快进合并。否则将报告致命。

      当以上两个条件都为真时,执行命令:

      git pull origin master:mymaster

      除了执行命令:

      git fetch origin master:mymaster

      也会执行:

      git 合并 FETCH_HEAD。

      注意:not git merge mymaster

      FETCH_HEAD 和 mymaster 不同,因为 mymaster 可能已经快进合并了。

      【讨论】:

        【解决方案4】:

        我曾使用 smartgit 创建分支,因此该分支可能没有正确合并到 master。 为发行版创建支持分支,即 support/4.2,自动创建标签,但现在我尝试执行 git pull,它显示了同样的错误。 由于 support/4.2 分支是在 github 中创建的,但未在本地正确合并。 所以我用了这个:- git pull origin master:mymaster

        就我而言 - git pull origin support/4.2:support/4.2

        它有效:)

        【讨论】:

          猜你喜欢
          • 2017-11-26
          • 1970-01-01
          • 1970-01-01
          • 2017-02-23
          • 2013-10-26
          • 2013-12-31
          • 2017-03-28
          • 2018-06-07
          • 2018-03-05
          相关资源
          最近更新 更多