为何执行git pull时需设置上游分支?如何保持分支关联?
关于Git Pull需设置上游分支的疑问解答
一、为什么执行git pull时需要设置上游分支?
Git的git pull命令实际是git fetch(拉取远程代码)加上git merge(或git rebase,取决于配置)的组合操作。它需要明确当前本地分支对应的远程分支是谁,才能知道从哪个远程分支拉取代码并合并到本地。
如果本地分支没有配置追踪分支(即上游分支),Git无法自动关联对应的远程分支,就会抛出你遇到的报错,要求你手动指定远程和分支,或者通过git branch --set-upstream-to=origin/<branch> local-branch-name来建立本地分支与远程分支的追踪关系。
你的操作流程里,虽然远程已经存在origin/local-branch-name分支,但本地的local-branch-name分支并没有和它建立追踪关联,所以git pull不知道该拉取哪个远程分支的代码。
二、如何让本地分支的上游分支始终保持一致?
有几种方法可以实现:
创建分支时直接建立追踪:
从远程分支拉取并创建本地分支时,使用以下命令,会自动让本地分支追踪对应的远程分支:# Git 2.23及以上版本用switch git switch -c local-branch-name origin/local-branch-name # 旧版本用checkout git checkout -b local-branch-name origin/local-branch-name第一次推送时自动设置追踪:
如果本地分支已经创建,第一次推送到远程时加上-u参数,会自动建立本地分支与远程同名分支的追踪关系:git push -u origin local-branch-name之后再执行
git pull就不需要手动指定了。全局配置自动建立追踪:
设置Git全局配置,让新建的分支默认自动追踪远程同名分支:git config --global branch.autoSetupMerge always这样以后无论是从远程拉取分支,还是推送本地新分支到远程,Git都会自动帮你建立追踪关系,无需手动执行
git branch --set-upstream-to。
你的操作流程(翻译后)
# 查看当前所在分支 $ git branch | grep "*" local-branch-name # 执行git pull报错 $ git pull 当前分支没有追踪信息。 请指定你想要基于哪个分支进行变基。 详情请查看git-pull(1)手册。 git pull <远程仓库名> <分支名> 如果你想为当前分支设置追踪信息,可以执行: git branch --set-upstream-to=origin/<分支名> local-branch-name # 查看远程分支,确认存在对应分支 $ git branch -r | grep local-branch-name origin/local-branch-name # 远程仓库中存在该分支
内容的提问来源于stack exchange,提问作者caot
相关产品推荐
相关产品推荐

