Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有refspec差异的Git pull/fetch_Git_Git Pull_Git Fetch - Fatal编程技术网

具有refspec差异的Git pull/fetch

具有refspec差异的Git pull/fetch,git,git-pull,git-fetch,Git,Git Pull,Git Fetch,使用refspec是获取远程分支并创建具有给定名称的类似分支的一种方便方法(或者反过来:使用与本地分支不同的给定名称创建远程分支)。我对一件小事感到困惑——因为pull也会与当前分支合并,我希望从中得到不同的行为: git fetch origin master:mymaster 来自 git pull origin master:mymaster 上述两个命令似乎产生完全相同的结果——这是一个名为mymaster的本地分支,与origin/master相同。我是对的,还是两者之间有着模糊的

使用refspec是获取远程分支并创建具有给定名称的类似分支的一种方便方法(或者反过来:使用与本地分支不同的给定名称创建远程分支)。我对一件小事感到困惑——因为pull也会与当前分支合并,我希望从中得到不同的行为:

git fetch origin master:mymaster
来自

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


最后,使用refspec将创建一个本地分支而不是一个跟踪分支,对吗?因为在调用git push时,跟踪分支是自动推送的,不带任何参数。AFAIK

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


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

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

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

git pull origin master:mymaster
  • 转到原点并获取分支“主”
  • 在本地制作一份名为“mymaster”的副本
  • 将“mymaster”合并到当前分支中
  • 完全合格,即
    refs/heads/mymaster
    refs/heads/master
    。为了进行比较,git在克隆上设置的默认refspec是
    +refs/heads/*:refs/remotes/origin/*
    refs/remotes
    提供了一个方便的名称空间,用于将远程分支与本地分支分开。您要做的是告诉git将远程跟踪分支放在与本地分支相同的名称空间中


    至于“跟踪分支”,这只是配置文件中的一个条目,告诉git在默认情况下将本地分支拉到/推到哪里。

    我使用smartgit创建了分支,所以可能是在该分支没有正确地合并到主分支中。 为ie support/4.2版创建了支持分支,标签自动创建,但现在我尝试使用git pull,它显示了相同的错误。 As support/4.2 brannch是在github中创建的,但没有在local中正确合并。 所以我用了这个: git pull原始主机:mymaster

    在我的例子中-git拉原点支持/4.2:support/4.2


    它的工作原理是:)

    git获取原始主机:mymaster

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

  • 本地当前分支不能是mymaster

  • 本地mymaster分支是源代码/主代码的祖先

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

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

    git pull原始主机:mymaster

    除了执行命令外:


    git获取源主机:mymaster

    还将执行:

    git合并获取头

    注意:不是git合并mymaster


    FETCH\u HEAD与mymaster不同,因为mymaster可能已经是快进合并了。

    但它真的会是完全相同的结果吗?我希望
    pull
    origin/master
    合并到local
    master