为什么创建git分支并不复制所有文件?

时间:2016-06-28 09:24:53

标签: git git-branch git-pull

git branch告诉我,我在上。 我写了git checkout -b newbranchgit branch向我显示我在新创建的分支 newbranch 上。 我写git pull并收到以下错误:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> newbranch

我想这是因为我无法从我刚刚创建的分支中拉出来。所以我写git pull origin master并获得分支 master newbranch 之间不同的百万个文件(使用我的完整控制台,所以我看不到它的开头错误),结尾如下:

Please move or remove them before you can merge.
Aborting

我不明白为什么分支 newbranch 不是 master 的精确副本。从我在创建新分支时读到的内容开始,它与我所在分支的提交相同。我只想让git pull确保所有文件与master上的文件完全相同。如果新分支不是从中复制的分支的完整副本,我就不知道所有文件的取自何处。

修改 正如大家所提到的,问题是我的本地主人与远程主人不同。所以我不得不这样做:

git checkout master
git branch -d newbranch
git fetch --all
# change permision issues with chmod and chown
git reset --hard origin/master
git checkout -b newbranch

2 个答案:

答案 0 :(得分:5)

git最重要的一个属性是git是一个分布式版本控制系统。这意味着您的本地分支机构不需要与您的远程分支同步。

在您的特定情况下,您的计算机上有master。执行git checkout -b newbranch后,您创建的新分支与计算机上的master相同。

但是远程计算机上还有master,其名称为origin(如果使用它,可能是GitHub)。因此,当您执行git pull origin master时,您正在将本地newbranch与远程origin/master合并,而不是本地master。我认为您的情况是,您的本地masterorigin/master合并了冲突。

你应该做什么

创建新分支

git checkout -b newbranch # create local newbranch from local master
git push --set-upstream origin newbranch # push your local newbranch to origin/newbranch

您还希望让本地主人与origin/master

保持同步
git checkout master
git pull # and solve merge conflicts

答案 1 :(得分:2)

如果您只是想差异;考虑使用以下命令之一:

git diff master         # diff with local master branch
git diff origin/master  # diff with master on origin
git diff master --stat  # diff with local master branch (but show list of files only)

您有很多差异的原因可能是您的分支与 origin / master 不是最新的。您的分支 newbranch 确实应该是一个精确的&#34;副本&#34;您的主分支。 git diff master应为空。

相关问题