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

Why creating git branch doesn't copy all files?

git branch 显示我在 master。 我写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 并得到一百万个文件,这些文件在分支 masternewbranch 之间不同(使用我的完整控制台所以我不能请参阅错误的开头),结尾如下:

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

如果您只是想看看区别;考虑使用以下命令之一:

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)

你有很多差异的原因可能是你的 master 分支不是 origin/master 的最新版本。您的分支 newbranch 确实应该是您的主分支的确切 "copy"。 git diff master 应该是空的。

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