git中pull和git branch显示的分支不同?

新手上路,请多包涵

问题出现的平台版本及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)
git init
git remote add origin git@github.com:StarForAll/myRepository

git pull origin linuxprogram
git branch

你期待的结果是什么?实际看到的错误信息又是什么?

问题描述

在git init之后,在和远端进行remote连接,在pull一个分支为xxx,但在本地中进行git branch,显示的是master.(远端和本地分支不一致)导致我进行push的时候也出现了问题.

问题出现的环境背景及自己尝试过哪些方法

阅读 4.4k
3 个回答

git pull 命令用于从另一个存储库或本地分支获取并集成(整合)。通常我们会以下面的方式使用它:

# 在特定情况下<远程主机名>、<远程分支名>、<本地分支名>都是可省略的
$ git pull <远程主机名> <远程分支名>:<本地分支名>

当我们省略本地分支名时,默认就是当前分支(HEAD)。由于你是一个新的工作空间,所以本地默认的是 master 分支。

因此你现在执行 git branch 会显示 master,但其中的内容实际上和远程 linuxprogram 分支的内容一致。

如果你想你上面的命令达到你想要的效果,你需要在拉取之前创建切换到目标分支,完整的命令可以是:

$ git init
$ git remote add origin <remote_url>
$ git checkout -b linuxprogram
$ git pull origin linuxprogram

如果你想直接在拉取指定分支时创建本地对应同名分支,你可以使用下面的命令:

$ git fetch origin linuxprogram:linuxprogram

当然,有很多其它步骤也能达到同样的目的。

另外,如果你想直接使用 git push 进行推送的话,你还需要在第一次推送时设置当前分支的上游分支,就像是下面这样:

$ git push -u origin linuxprogram:linuxprogram

后续,你就可以直接(在单个远程仓库的情况下)使用 git pullgit push 了。

个人推测你操作的顺序有点问题。

git init
git remote add origin git@github.com:StarForAll/myRepository

# 这两步骤跟远端的仓库进行了关联,但是没有指定branch,然后默认是master

git pull origin linuxprogram
# 你这一步把linuxprogram分支的内容拉到了本地master分支

git branch 
# 这一步看到的还是master分支

你在执行了第一步操作之后

git branch 
# 先查看下本地分支,如果是master,则切换分支到linuxprogram
git checkout -b linuxprogram

git pull origin linuxprogram # 最后再拉对应远程分支的内容

git pull

Incorporates changes from a remote repository into the current branch.

git pull 使用的是本地当前分支。你没改过的话就是 master 。

你要想“一致”,就先把本地当前分支切换成远程的同名分支。如果本地还没有这个分支,就创建一个。

=======================

另一个方法,由于你是一个全新的仓库,可以用下面的方法代替 git pull ....

git fetch origin
git checkout origin/linuxprogram

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进