如何检查远程Git分支?

有人将带有git push origin test的名为test的分支推送到共享存储库。我可以看到带有git branch -r的分支。我如何检查远程test分支?我尝试过:

  • git checkout test,什么都不做
  • git checkout origin/test表示* (no branch)
7504971 次浏览

答案根据配置的是一个远程存储库还是多个远程存储库而拆分。这样做的原因是,对于单个远程情况,一些命令可以简化,因为含糊不清。

针对Git 2.23更新:对于旧版本,请参阅末尾的部分。

用一个遥控器

在这两种情况下,首先从远程存储库获取,以确保您下载了所有最新的更改。

$ 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 2.23之前

git switch是在Git 2.23中添加的,在此之前git checkout用于切换分支。

要仅使用单个远程存储库签出:

git checkout test

如果有多个远程存储库配置它变得有点长

git checkout -b test <name of remote>/test

在这种情况下,您可能想要创建一个跟踪远程test分支的本地test分支:

$ git branch test origin/test

git的早期版本中,您需要一个显式的--track选项,但现在当您分支远程分支时,这是默认的。

要创建本地分支切换到它,请使用:

$ git checkout -b test origin/test

旁注:使用现代Git(>=1.6.6),您可以仅使用

git checkout test

(请注意,它是'test'而不是'起源/测试')执行神奇的DWIM-mery并为您创建本地分支'test',上游将是远程跟踪分支'起源/测试'。


git branch输出中的* (no branch)意味着您在未命名分支上,处于所谓的“分离HEAD”状态(HEAD直接指向提交,而不是对某些本地分支的符号引用)。如果您在此未命名分支上进行了一些提交,您始终可以在当前提交下创建本地分支:

git checkout -b test HEAD

评论中建议的更现代的方法:

@Dennis:git checkout <non-branch>,例如git checkout origin/test导致分离的HEAD/未命名分支,而git checkout testgit checkout -b test origin/test导致本地分支test(远程跟踪分支origin/test上游)-Jakub Narbski Jan 9'14 at 8:17

重点git checkout origin/test

对于未命名的远程(留档),这将DWIM

$ git checkout -t remote_name/remote_branch

要添加新的遥控器,您需要先执行以下操作:

$ git remote add remote_name location_of_remote$ git fetch remote_name

第一个告诉Git远程存在,第二个获取提交。

接受的答案不为你工作?

虽然第一个和选定的答案在技术上是正确,但您可能尚未从远程存储库中检索所有对象和引用。如果是这种情况,你将收到以下错误:

$ git checkout -b remote_branch origin/remote_branch

致命:git签出:更新路径与切换分支不兼容。
您是否打算检出无法解析为提交的“源/remote_branch”?

解决方案

如果您收到此消息,您必须首先执行git fetch origin,其中origin是远程存储库的名称,然后再运行git checkout remote_branch。这是一个包含响应的完整示例:

$ git fetch originremote: 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-namee6ef1e0..5029161  develop    -> origin/develop* [new branch]      demo       -> origin/demod80f8d7..359eab0  master     -> origin/master
$ git checkout demoBranch demo set up to track remote branch demo from origin.Switched to a new branch 'demo'

如您所见,运行git fetch origin检索了我们尚未设置为在本地计算机上跟踪的任何远程分支。从那里,由于我们现在有了远程分支的引用,我们可以简单地运行git checkout remote_branch,我们将获得远程跟踪的好处。

要克隆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

如果分支在origin遥控器以外的地方,我喜欢执行以下操作:

$ git fetch$ git checkout -b second/next upstream/next

这将签出upstream远程上的next分支到名为second/next的本地分支。这意味着如果您已经有一个名为next的本地分支,它不会冲突。

$ git branch -a* second/nextremotes/origin/nextremotes/upstream/next

git branch -r表示对象名称无效,因为该分支名称不在Git的本地分支列表中。从源更新您的本地分支列表:

git remote update

然后再次尝试检查您的远程分支。

这对我有用。

我相信git fetch拉入所有远程分支,这不是原始海报想要的。

我尝试了上述解决方案,但不起作用。试试这个,它有效:

git fetch origin 'remote_branch':'local_branch_name'

这将获取远程分支并创建一个名为local_branch_name的新本地分支(如果还不存在)并跟踪其中的远程分支。

你可以试试

git fetch remotegit checkout --track -b local_branch_name origin/branch_name

git fetchgit checkout -b local_branch_name origin/branch_name

git fetch && git checkout your-branch-name

请按照命令创建一个空文件夹。输入并使用此命令:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_urlCloning into 'iPhoneV1'...remote: Counting objects: 34230, done.remote: Compressing objects: 100% (24028/24028), done.remote: Total 34230 (delta 22212), reused 15340 (delta 9324)Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.Resolving deltas: 100% (22212/22212), done.Checking connectivity... done.saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discoveryBranch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from origin.Switched to a new branch '1_4_0_content_discovery'

用途:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

在我的良性情况下,其他答案不适用于现代Git。如果远程分支是新的,您可能需要先拉取,但我没有检查过这种情况。

命令

git fetch --allgit checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>

等于

 git fetch --all

然后

 git checkout -b fixes_for_dev origin/development

两者都将从development创建一个latest fixes_for_dev

首先,你需要做到:

git fetch#如果你不知道分支名称

git fetch origin branch_name

其次,您可以通过以下方式将远程分支签出到本地:

git checkout -b branch_name origin/branch_name

-b将从您选择的远程分支创建指定名称的新分支。

其他人给出了解决方案,但也许我可以告诉你为什么。

什么都不做的git签出测试

Does nothing不等于doesn't work,所以我猜当你在终端中键入“git check out test”并按回车键时,没有消息出现,也没有错误发生。我对吗?

如果答案是“是”,我可以告诉你原因。

原因是您的工作树中有一个名为“test”的文件(或文件夹)。

git checkout xxx解析时,

  1. Git最初将xxx视为分支名称,但没有任何名为test的分支。
  2. 然后Git认为xxx是一个路径,幸运的是(或不幸的是),有一个名为test的文件。所以git checkout xxx意味着丢弃xxx文件中的任何修改。
  3. 如果也没有名为xxx的文件,那么Git将尝试根据某些规则创建xxx。其中一个规则是如果存在remotes/origin/xxx,则创建一个名为xxx的分支。

您可以使用以下Bash脚本开始跟踪所有远程分支:

#!/bin/bashgit fetch --allfor branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`do git branch -f --track "$branch" "origin/$branch"done

这也是一个单行版本:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;

你基本上看到了分支,但你还没有本地副本!

您需要fetch分支…

您可以简单地获取然后签出到分支,使用下面的一行命令执行此操作:

git fetch && git checkout test

我还创建了下面的图片供您分享差异,看看fetch是如何工作的,以及它与pull的不同之处:

git get ch

我使用以下命令:

git checkout --track origin/other_remote_branch

git remote show <origin name>命令将列出所有分支(包括未跟踪的分支)。然后您可以找到需要获取的远程分支名称。

示例:

git remote show origin

使用以下步骤获取远程分支:

git fetch <origin name> <remote branch name>:<local branch name>git checkout <local branch name > (local branch name should the name that you given fetching)

示例:

git fetch origin test:testgit checkout test

获取新创建的分支

git fetch

切换到另一个分支

git checkout BranchName

从远程获取并签出分支。

git fetch <remote_name> && git checkout <branch_name>

例如:

git获取来源&&git结帐功能/XYZ-1234-Add-警报

这些答案对我都不管用。这个管用:

git checkout -b feature/branch remotes/origin/feature/branch

只需使用远程分支的名称运行git checkout。Git将自动创建一个跟踪远程分支的本地分支:

git fetchgit checkout test

但是,如果在多个远程中找到该分支名称,这将不起作用,因为Git不知道使用哪个。在这种情况下,您可以使用:

git checkout --track origin/test

git checkout -b test origin/test

2.19中,Git学习了#0配置,它指定了解决此类歧义时默认使用的远程。

我被困在上面所有建议的error: pathspec 'desired-branch' did not match any file(s) known to git.中。我在Git版本1.8.3.1上。

所以这个为我工作

git fetch origin desired-branchgit checkout -b desired-branch FETCH_HEAD

背后的解释是,我注意到在获取远程分支时,它被获取到FETCH_HEAD

git fetch origin desired-branch
From github.com:MYTEAM/my-repo* branch            desired-branch -> FETCH_HEAD

如果远程分支名称以特殊字符开头,您需要在签出命令中对其使用单引号,否则Git将不知道您在谈论哪个分支。

例如,我尝试签出名为#9773的远程分支,但命令无法正常工作,如下图所示:

在此输入图片描述

出于某种原因,我想知道尖锐的符号(#)是否与它有关,然后我尝试用单引号包围分支名称,例如'#9773'而不仅仅是#9773,幸运的是它工作得很好。

git checkout -b '#9773' origin/'#9773'

使用fetch拉取所有遥控器

   git fetch --all

要列出远程分支:

   git branch -r

列出你所有的分支

   git branch -l>>outpots like-* developtestmaster

签出/更改分支

   git checkout master

对我们来说,似乎remote.origin.fetch配置出了问题。因此,除了master之外,我们看不到任何其他远程分支,所以git fetch [--all]没有帮助。git checkout mybranchgit checkout -b mybranch --track origin/mybranch都不起作用,尽管它肯定是在远程。

之前的配置只允许获取master

$ git config --list | grep fetchremote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

使用*修复它并从源获取新信息:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git fetch...* [new branch] ......

现在我们可以git checkout本地远程分支。

我不知道这个配置是如何在我们的本地存储库中结束的。

要获取所有远程分支,请使用以下命令:

git fetch --all

然后检查分支:

git checkout test

有很多选择,例如:

  • 备选案文1:

    git fetch && git checkout test

    这是最简单的方法。

  • 备选案文2:

    git fetchgit checkout test

    这是相同的,但在两个步骤。

git check out-b"Branch_name"[B表示创建本地分支]

git分支--all

git check out-b"您的分支名称"

git分支

git拉取来源“您的分支名称”

从master分支成功签出到dev分支

输入图片描述

只需运行这两个命令,您就可以开始了。

git checkout <branch-name>git pull <remote> <branch-name>

我用了那个:

git clean -fxd                         # removes untracked (new added plus ignored files)
git fetchgit checkout {branchname}
git reset --hard origin/{branchname}   # removes staged and working directory changes

您可以在本地添加一个新分支test,然后使用:

git branch --set-upstream-to=origin/test test

我总是这样做:

git fetch origin && git checkout --track origin/branch_name

git fetch --all

会把所有的远程分支送到你的本地

git checkout test

会把你转到测试分支

出于某种原因,我做不到:

git checkout -b branch-name origin/branch-name

它抛出了错误:

致命的:'起源/分支名称'不是一个提交,分支'分支名称'不能从它创建

我不得不做:

git checkout -b branch-name commit-sha

太长别读

使用git switch而不是git checkout。更多细节是在本页

我认为答案已经过时了。Git现在将checkout的一些功能拆分为switchrestore

以下是我的总结:

如果您想更新远程分支的内容,您应该创建一个本地分支来“跟踪”远程分支。您可以在本地更新任何您想要的内容,并最终推送到远程。如果您在克隆存储库后直接签出到远程分支,您可能会看到“分离HEAD”状态和来自Git的以下消息:

Note: switching to 'origin/asd'.
You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at d3e1083 Update a

那么我们如何创建本地分支来跟踪远程分支呢?

要创建本地分支来跟踪远程分支,您可以使用git checkout <remote branch name>git switch <remote branch name>。如果您的文件或文件夹与您的远程分支名称同名,git checkout会输出一些错误消息,但git switch可以正常工作!

示例:

  1. 查看所有分支,我们要创建一个本地分支来跟踪远程分支remotes/origin/asd,我们还有文件名asd

    $ git branch -a* masterremotes/origin/HEAD -> origin/masterremotes/origin/asdremotes/origin/ereresremotes/origin/masterremotes/origin/zxc$ lsa  asd
  2. 文件名与远程分支相同,如果我们使用git checkout命令创建本地分支来跟踪远程分支,Git应该会输出一些错误消息

    $ git checkout asdfatal: 'asd' could be both a local file and a tracking branch.Please use -- (and optionally --no-guess) to disambiguate
  3. 如果我们使用git switch,它会起作用!

    $ git switch ereresBranch 'ereres' set up to track remote branch 'ereres' from 'origin'.Switched to a new branch 'ereres'
    $ git branch -vv* ereres 3895036 [origin/ereres] Update amaster f9e24a9 [origin/master] Merge branch 'master' of

在我看来,没有人建议最简单的方法(或者也许我太笨了,认为这是“一种方式”)。但无论如何,试试这个:

git pull origin remoteBranchNamegit switch remoteBranchName

在相同的情况下,这对我有效(在我上次拉取请求后在远程上创建的分支)。

我不确定。我每天都在做这件事。以下命令与gem类似。

开发是您要签出的分支。

git fetch && git checkout dev

在您的情况下,您可以使用此命令:

git checkout -b test origin/test

工作命令

  1. git fetch origin 'remote_branch':'local_branch_name'

  2. git switch 'local_branch_name'

  3. git pull origin 'remote_branch':'local_branch_name'

第一个用于获取分支并从远程分支创建本地分支。

第二个是切换到本地分支。

三是用于将远程的最新更改拉取到本地分支。