为什么创建 git 分支不会复制所有文件?
Why creating git branch doesn't copy all files?
git branch
显示我在 master。
我写git checkout -b newbranch
。
git 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
如果您只是想看看区别;考虑使用以下命令之一:
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
合并。我认为您的情况是您的本地 master
与 origin/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
git branch
显示我在 master。
我写git checkout -b newbranch
。
git 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
如果您只是想看看区别;考虑使用以下命令之一:
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
合并。我认为您的情况是您的本地 master
与 origin/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