“git fetch”上的本地分支与远程分支

时间:2018-03-06 20:16:34

标签: git

我有一个我朋友创建的远程分支,这个分支在我的本地仓库中不存在(没有签出)。

我运行git fetch,然后git checkout <myFriendBranch>, 现在我与我的朋友分公司保持联系,我不需要运行git mergegit pull

我想知道为什么?

例如,如果我们同时处理并存在于我的本地设备上的分支,则git fetch单独不会更新我的工作目录,我将需要运行git merge或{ {1}}。

3 个答案:

答案 0 :(得分:5)

让我们首先解释一下ow git在内部存储它的信息。

git将其数据存储在.git文件夹中。此文件夹包含有关本地和远程分支的信息。

本地和远程分支都只是指向SHA1的指针,并存储在.git文件夹中,如下所示。

enter image description here

什么是git fetch

git fetch是一个瓷器命令,用于将远程存储库同步到本地存储库。它只是将您计算机上尚未存在的所有hunks内容增量下载到.git文件夹而不对您的工作目录进行任何修改,只需下载即可存储该密码以供以后使用。

git fetch不会删除被检测的远程分支,因此如果您想要&#34;清理&#34;您的本地存储库并删除已删除的分支使用--prune标志 如果您有多个reomtes,则添加--all将获取所有reomtes。

git fetch --all --prune

enter image description here

此时,最新提交仅存储在.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首先获取内容,然后将其合并回您的分支

enter image description here

答案 1 :(得分:2)

git fetch从您朋友的存储库下载更改,并在您的本地存储库中创建一个名为origin/friends-branch的分支。执行git checkout friends-branch时,Git会识别远程跟踪分支并自动创建名为friends-branch的新本地分支。

答案 2 :(得分:1)

似乎你的问题是关于什么时候你必须合并或拉动,而不是你什么时候(而不是只需要提取和结账)。由于pull基本上是“获取和合并”,因此归结为:何时必须合并,为什么?

您合并以将更改(例如,可能是从远程获取的更改)合并到现有分支中。

在你的第一个例子中,你的朋友创建了一个分支,而你只是复制你朋友的分支;您没有将他们的更改合并到任何现有分支中,而是根据他们的更改创建新分支。所以你不需要合并任何东西。相反,在获取后,您将创建一个新分支。 (您碰巧使用快捷方式来创建分支,因为当您尝试签出不存在的分支时,git会识别您的意图,但只有一个远程跟踪引用与给定名称匹配。)