"git fetch"是一个远程分支。
"git fetch"是一个远程分支。
远程仓库包含多个分支,例如 origin/daves_branch
:
$ git branch -r origin/HEAD -> origin/master origin/daves_branch origin/master
我如何在本地仓库中切换到 daves_branch
分支,使其跟踪 origin/daves_branch
?
我尝试了以下命令:
$ git fetch origin daves_branch $ git checkout daves_branch
git fetch: git checkout
其中,
是远程分支或源参考,
是尚不存在的本地分支或目标参考,您希望跟踪它并且可能希望将其命名为远程分支或源参考。这在
的说明中在选项下有解释。
Bash很聪明,如果我在远程分支的前几个字母之后按Tab,它会自动完成第一个命令。也就是说,我甚至不需要命名本地分支;Bash会自动为我复制远程分支的名称。感谢Bash!
另外,正如这篇类似的Stack Overflow帖子中的回答所示,如果您没有在fetch
中命名本地分支,则仍然可以在您检出时使用-b
标志来创建它。也就是说,git fetch
,然后跟随git checkout -b
与我的初始答案完全相同。显然,如果您的存储库只有一个远程,则在fetch
之后只需执行git checkout
,它将为您创建一个本地分支。例如,您刚刚克隆了一个存储库并希望从远程检出其他分支。我相信一些关于fetch
的文档可能直接从pull
中复制过来了。特别是选项中关于
的部分是相同的。但是,我不认为fetch
会进行merge
,因此如果你让冒号的目标一侧为空,fetch
应该不会执行任何操作。
注意:git fetch
等同于git fetch
,因此不会执行任何操作,但git fetch
等同于git fetch
,这将把远程的
复制到本地。
我猜这只有在你想本地复制一个远程分支,但不一定立即检出时才有用。否则,我现在会使用被接受的答案,这在checkout描述的第一部分和选项部分的--track
解释中详细说明,因为这只需要一行代码。嗯……有点像一行代码,因为你仍然需要先运行git fetch
。
FYI:
(来源:目的地)的顺序解释了Git 1.7版本之前奇怪的删除远程分支的方法。也就是说,将没有任何内容推送到目标refspec。
更新:使用 Git Switch
下面提到的所有信息都是准确的,但是增加了一个新命令 git switch
,该命令简化了操作。
如果 daves_branch
在远程仓库中存在,但是本地分支中不存在,那么只需输入:
git switch daves_branch
由于你在本地没有这个分支,这将自动在远程仓库中搜索 switch
命令。然后它还会自动设置远程分支跟踪。
请注意,如果 daves_branch
本地不存在,则需要先使用 git fetch
,然后再使用 switch
。
原始文章
您需要创建一个本地分支来跟踪一个远程分支。以下命令将创建一个名为 daves_branch 的本地分支,跟踪远程分支 origin/daves_branch。当您推送更改时,远程分支将被更新。
对于大多数最新版本的 Git:
git checkout --track origin/daves_branch
其中,--track
是 git checkout -b [branch] [remotename]/[branch]
的缩写,其中 [remotename] 在此处是 origin,[branch] 在此处是两次出现的 daves_branch。
对于 Git 1.5.6.5,您需要使用以下命令:
git checkout --track -b daves_branch origin/daves_branch
对于 Git 1.7.2.3 及更高版本,这已经足够了(可能早些版本也是如此,但这是我可以快速找到的最早确认):
git checkout daves_branch
请注意,使用最新的 Git 版本,此命令不会创建本地分支,将使您处于“分离 HEAD”状态。如果您需要本地分支,请使用 --track
选项。
完整的详细信息请参见:3.5 Git 分支 - 远程分支、跟踪分支