我有一个我朋友创建的远程分支,这个分支在我的本地仓库中不存在(没有签出)。
我运行git fetch
,然后git checkout <myFriendBranch>
,
现在我与我的朋友分公司保持联系,我不需要运行git merge
或git pull
。
我想知道为什么?
例如,如果我们同时处理并存在于我的本地设备上的分支,则git fetch
单独不会更新我的工作目录,我将需要运行git merge
或{ {1}}。
答案 0 :(得分:5)
让我们首先解释一下ow git在内部存储它的信息。
git
将其数据存储在.git
文件夹中。此文件夹包含有关本地和远程分支的信息。
本地和远程分支都只是指向SHA1的指针,并存储在.git
文件夹中,如下所示。
git fetch
? git fetch
是一个瓷器命令,用于将远程存储库同步到本地存储库。它只是将您计算机上尚未存在的所有hunks
内容增量下载到.git
文件夹而不对您的工作目录进行任何修改,只需下载即可存储该密码以供以后使用。
git fetch
不会删除被检测的远程分支,因此如果您想要&#34;清理&#34;您的本地存储库并删除已删除的分支使用--prune
标志
如果您有多个reomtes,则添加--all
将获取所有reomtes。
git fetch --all --prune
此时,最新提交仅存储在.git
文件夹中。如果您希望更新本地workind目录,则需要将其合并。继续了解如何以及为什么。
git checkout
? git checkout <name>
正在分支之间切换。首先git检查分支是否在本地出现 - 如果它之前已经检出过,如果没有,是否会在远程数据库下搜索它,而不是将其作为新的本地分支进行检查。
git pull
? git pull
只是git fetch
+ git merge
的alises
git merge
会将所需的分支内容添加到您当前的分支中
例如git pull origin master
将获取遥控器并将下载缺失的内容作为上述解释,然后将其合并(更新)到您的本地工作目录。
以下是git pull
命令的详细输出,您可以看到git首先获取内容,然后将其合并回您的分支
答案 1 :(得分:2)
git fetch
从您朋友的存储库下载更改,并在您的本地存储库中创建一个名为origin/friends-branch
的分支。执行git checkout friends-branch
时,Git会识别远程跟踪分支并自动创建名为friends-branch
的新本地分支。
答案 2 :(得分:1)
似乎你的问题是关于什么时候你必须合并或拉动,而不是你什么时候(而不是只需要提取和结账)。由于pull基本上是“获取和合并”,因此归结为:何时必须合并,为什么?
您合并以将更改(例如,可能是从远程获取的更改)合并到现有分支中。
在你的第一个例子中,你的朋友创建了一个分支,而你只是复制你朋友的分支;您没有将他们的更改合并到任何现有分支中,而是根据他们的更改创建新分支。所以你不需要合并任何东西。相反,在获取后,您将创建一个新分支。 (您碰巧使用快捷方式来创建分支,因为当您尝试签出不存在的分支时,git会识别您的意图,但只有一个远程跟踪引用与给定名称匹配。)