问题描述
我所做的是
-
git fetch
获取所有远程分支元数据, -
git checkout remotes/origin/$remote_branch
-
git checkout -b $local_branch
当我在Intellij中浏览文件时,远程分支上的所有文件都能正确显示。
拉远程文件的魔力是什么?
解决方法
拉远程文件的魔力是什么?
您的第二次签出确实根据您当前的HEAD(即origin / $ remote_branch)创建了一个本地分支。
但是正确的命令是使用新命令git switch
(presented here)
git switch -c $local_branch origin/$remote_branch
,
您从一个错误的假设开始:git fetch
不仅获得元数据,还获得 commits 。提交包含数据(文件的快照)和元数据:有关谁进行提交,何时执行等等的信息。获得所需的任何新提交后,您的git fetch
然后继续更新您的远程跟踪名称,即origin/*
名称。它们的全名是refs/remotes/origin/name
,其中每个 name
对应一个分支名称,就像在另一个Git中一样,位于origin
。
当您运行git checkout remotes/origin/branch
时,您的Git会将您置于分离的HEAD 模式,并且已签出一个特定的提交。因此,此步骤更新了您可以在工作树中看到的文件。 git checkout -b name
步骤创建了一个新的 name ,用于标识同一提交(即refs/remotes/origin/branch
标识的同一提交),并且不需要更新文件。
重要的是 commits 。这些名称,无论是origin/somebranch
之类的远程跟踪名称,还是somebranch
之类的(本地)分支名称,都只能帮助您(和Git)查找。提交包含文件,并且是 历史记录。 git fetch
步骤从其他一些Git存储库中获取它们拥有的,不需要的,不需要的任何新提交;从那时起,您在这里所做的一切都是本地的。