有人使用命令 git push origin test
推送了一个名为 test
的分支到一个共享的代码库。我可以通过命令 git branch -r
查看这个分支。那么,我如何检出远程的 test
分支呢?我尝试过:
git checkout test
,但没有任何变化。git checkout origin/test
显示* (no branch)
。
有人使用命令 git push origin test
推送了一个名为 test
的分支到一个共享的代码库。我可以通过命令 git branch -r
查看这个分支。那么,我如何检出远程的 test
分支呢?我尝试过:
git checkout test
,但没有任何变化。git checkout origin/test
显示 * (no branch)
。在两种情况下,都要从远程存储库开始获取,以确保您已下载所有最新更改。
$ git fetch
这将会为您获取所有的远程分支。您可以通过以下命令查看可用于签出的分支:
$ git branch -v -a
...
remotes/origin/test
remotes/*
开头的分支可以被视为远程分支的只读副本。要在分支上工作,您需要从中创建一个本地分支。这可以通过 Git 命令 switch
(自Git 2.23起)来完成,只需给它远程分支的名称(减去远程名称)即可:$ git switch test
在这种情况下,Git正在猜测(可以使用--no-guess
禁用),您正在尝试检出并跟踪具有相同名称的远程分支。
如果存在多个远程仓库,则需要显式命名远程仓库。
与以前一样,首先获取最新的远程更改:
$ git fetch origin
这将为您获取所有远程分支。您可以使用以下命令查看可用于检出的分支:
$ git branch -v -a
有了远程分支,现在您需要使用-c
检出您感兴趣的分支以创建一个新的本地分支:
$ git switch -c test origin/test
有关使用 git switch
的更多信息:
$ man git-switch
git switch
是在 Git 2.23 中添加的,在此之前,git checkout
被用于切换分支。
要仅检出单个远程存储库:
git checkout test
git checkout -b test <name of remote>/test
git fetch
,以便 git 知道 origin/test
的存在。 - Neil Sarkargit fetch origin test
来完成此操作。 - Andreworigin/test
?" - Xeoncrossgit checkout test
无法生效。这是因为 Git 不知道应该使用哪一个仓库的分支。 - masukomi旁注:使用现代 Git(>= 1.6.6),你可以仅使用
git checkout test
git branch
输出中的*(无分支)
表示您处于未命名分支上,即所谓的“分离的HEAD”状态(HEAD直接指向提交,并不是某个本地分支的符号引用)。如果您在此未命名分支上进行了一些提交,则始终可以从当前提交创建本地分支:
git checkout -b test HEAD
根据评论建议的一种更现代的方法:
@Dennis:
git checkout <non-branch>
,例如git checkout origin/test
会导致分离 HEAD / 未命名分支,而git checkout test
或git checkout -b test origin/test
会导致本地分支test
(带有远程跟踪分支origin/test
作为 上游) - Jakub Narębski Jan 9 '14 at 8:17
重点在于 git checkout origin/test
error: pathspec 'branch_name' did not match any file(s) known to git.
那么你应该先执行 git fetch
。 - Dennisgit checkout <non-branch>
,例如 git checkout origin/test
会导致 HEAD 分离 / 无分支状态,而 git checkout test
或 git checkout -b test origin/test
会创建本地分支 test
(并将远程跟踪分支 origin/test
设为上游)。 - Jakub Narębskigit checkout -b test FETCH_HEAD
对我有效。 - KRoy在这种情况下,您可能希望创建一个本地的 test
分支,该分支跟踪远程的 test
分支:
$ git branch test origin/test
在早期的git
版本中,你需要显式地使用--track
选项,但是现在当你从远程分支分支时,默认就是这样的。
要创建本地分支并切换到它,请使用:
$ git checkout -b test origin/test
git checkout -b test/origin/test
你可能需要在它之前加上一个git fetch upstream
以确保你的本地仓库知道远程分支 test
的存在。否则,谢谢,一切都按照广告所说的那样运作。 - oldfartdeveloper虽然第一个和被选择的答案在技术上是正确的,但有可能您尚未从远程仓库检索所有对象和引用。如果是这种情况,您将收到以下错误消息:
$ git checkout -b remote_branch origin/remote_branch
致命错误:git checkout: 更新路径与切换分支不兼容。
你是想要检出无法解析为提交的 'origin/remote_branch' 分支吗?
如果你收到此消息,你必须先执行git fetch origin
,其中origin
是远程仓库的名称,然后再运行git checkout remote_branch
。以下是具体示例和响应:
$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
e6ef1e0..5029161 develop -> origin/develop
* [new branch] demo -> origin/demo
d80f8d7..359eab0 master -> origin/master
$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'
如您所见,运行git fetch origin
将检索我们尚未设置为在本地机器上跟踪的任何远程分支。从那里开始,由于现在我们有了对远程分支的引用,我们可以简单地运行git checkout remote_branch
,并获得远程跟踪的好处。
我尝试了上面的解决方案,但它没有起作用。请尝试这个,它有效:
git fetch origin 'remote_branch':'local_branch_name'
这将获取远程分支并创建一个名为local_branch_name
的新本地分支(如果不存在),并在其中跟踪远程分支。
这将为未命名为 origin 的远程仓库 DWIM(documentation):
$ git checkout -t remote_name/remote_branch
要添加新的远程,您需要首先执行以下操作:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
用法:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
在我这种情况下,其他答案在使用现代 Git 时无法正常工作。如果远程分支是新的,您可能需要先拉取,但我还没有检查过这种情况。
要克隆Git仓库,请执行以下操作:
git clone <either ssh url /http url>
上述命令会检出所有分支,但只会初始化master
分支。如果想要检出其他分支,请执行以下命令:
git checkout -t origin/future_branch (for example)
git checkout -t -b enhancement origin/future_branch
现在您的本地分支名称是enhancement
,但您的远程分支名称是future_branch
。
我经常执行以下操作:
git fetch origin && git checkout --track origin/branch_name
git branch test origin/test
) 才是有效的。很高兴前两个答案有20倍的投票数... - dwandersongit checkout origin/test
之前,git fetch origin test
是必要的命令。 - Craig Hicks