具有refspec差异的Git pull/fetch
使用refspec是获取远程分支并创建具有给定名称的类似分支的一种方便方法(或者反过来:使用与本地分支不同的给定名称创建远程分支)。我对一件小事感到困惑——因为pull也会与当前分支合并,我希望从中得到不同的行为:具有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相同。我是对的,还是两者之间有着模糊的
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只是源/目标对。使用refspecx: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
合并到localmaster
。