Jur*_*ass 6408 git remote-branch git-checkout
有人将一个名为test
with 的分支推git push origin test
送到共享存储库.我可以看到分支git branch -r
.
现在我正试图检查远程test
分支.
我试过了:
git checkout test
什么都不做
git checkout origin/test
给* (no branch)
.这令人困惑.我怎么能在"没有分支"?
如何查看远程Git分支?
hal*_*ski 8812
Jakub的答案实际上改善了这一点.如果Git版本≥1.6.6,只有一个遥控器,你可以这样做:
git fetch
git checkout test
Run Code Online (Sandbox Code Playgroud)
正如用户masukomi在评论中指出的那样,git checkout test
如果您有多个遥控器,则无法在现代git中使用.在这种情况下使用
git checkout -b test <name of remote>/test
Run Code Online (Sandbox Code Playgroud)
或速记
git checkout -t <name of remote>/test
Run Code Online (Sandbox Code Playgroud)
在开始在远程分支上本地工作之前,您需要在下面的答案中调用它.
要获取分支,您只需:
git fetch origin
Run Code Online (Sandbox Code Playgroud)
这将为您获取所有远程分支.您可以看到可用于结帐的分支:
git branch -v -a
Run Code Online (Sandbox Code Playgroud)
有了远程分支机构,您现在需要查看您感兴趣的分支机构,并为您提供本地工作副本:
git checkout -b test origin/test
Run Code Online (Sandbox Code Playgroud)
Jak*_*ski 1222
旁注:使用现代Git(> = 1.6.6),您可以使用
git checkout test
Run Code Online (Sandbox Code Playgroud)
(请注意,'test'而不是'origin/test')执行神奇的DWIM -mery并为您创建本地分支'test',其上游将是远程跟踪分支'origin/test'.
将* (no branch)
在git branch
输出意味着你是无名的分支,在所谓的"分离的头"状态(HEAD直接点提交,并不是象征性的参考了一些当地的分支机构).如果您在此未命名分支上进行了一些提交,则始终可以创建当前分支关闭当前提交:
git checkout -b test HEAD
Run Code Online (Sandbox Code Playgroud)
ndi*_*dim 546
在这种情况下,您可能想要创建一个test
跟踪远程test
分支的本地分支:
$ git branch test origin/test
Run Code Online (Sandbox Code Playgroud)
在早期版本中git
,您需要一个显式--track
选项,但是当您从远程分支分支时,这是默认选项.
Cor*_*lou 461
虽然第一个和选定的答案在技术上是正确的,但是您可能还没有从远程存储库中检索所有对象和引用.如果是这种情况,您将收到以下错误:
$ git checkout -b remote_branch origin/remote_branch
Run Code Online (Sandbox Code Playgroud)
致命: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'
Run Code Online (Sandbox Code Playgroud)
如您所见,运行git fetch origin
检索到的任何远程分支,我们尚未设置为在本地计算机上跟踪.从那里开始,由于我们现在有一个参考远程分支,我们可以简单地运行git checkout remote_branch
,我们将获得远程跟踪的好处.
Sah*_*lra 242
我尝试了上面的解决方案,但它没有用.试试这个,它有效:
git fetch origin 'remote_branch':'local_branch_name'
Run Code Online (Sandbox Code Playgroud)
这将获取远程分支并创建一个具有名称的新本地分支(如果尚不存在)local_branch_name
并跟踪其中的远程分支.
tac*_*ell 107
$ git checkout -t remote_name/remote_branch
Run Code Online (Sandbox Code Playgroud)
要添加新遥控器,您需要先执行以下操作:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
Run Code Online (Sandbox Code Playgroud)
第一个告诉Git远程存在,第二个获取提交.
mat*_*ter 102
使用:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
Run Code Online (Sandbox Code Playgroud)
在我的良性案例中,其他答案不适用于现代Git.如果远程分支是新的,您可能需要先拉,但我没有检查过这种情况.
Ali*_*eza 83
好的,答案很简单......你基本上看到了分支,但你还没有本地副本!...
你需要fetch
分支......
您可以简单地获取然后结帐到分支,使用下面的一行命令来执行此操作:
git fetch && git checkout test
Run Code Online (Sandbox Code Playgroud)
我还创建了下面的图像,供您分享差异,看看它是如何fetch
工作的以及它与以下方面的不同之处pull
:
Mad*_*amy 55
要克隆Git存储库,请执行以下操作:
git clone <either ssh url /http url>
Run Code Online (Sandbox Code Playgroud)
上面的命令检出所有分支,但只master
初始化分支.如果要结帐其他分支,请执行以下操作:
git checkout -t origin/future_branch (for example)
Run Code Online (Sandbox Code Playgroud)
此命令检出远程分支,您的本地分支名称将与远程分支相同.
如果要在结帐时覆盖本地分支名称:
git checkout -t -b enhancement origin/future_branch
Run Code Online (Sandbox Code Playgroud)
现在您的本地分支名称是enhancement
,但您的远程分支名称是future_branch
.
uma*_*uma 36
你可以试试
git fetch remote
git checkout --track -b local_branch_name origin/branch_name
Run Code Online (Sandbox Code Playgroud)
要么
git fetch
git checkout -b local_branch_name origin/branch_name
Run Code Online (Sandbox Code Playgroud)
Moh*_*med 32
首先,你需要做:
git fetch
#如果你不知道分支名称
git fetch origin branch_name
Run Code Online (Sandbox Code Playgroud)
其次,您可以通过以下方式检查远程分支到您的本地:
git checkout -b branch_name origin/branch_name
Run Code Online (Sandbox Code Playgroud)
-b
将从您选择的远程分支创建指定名称的新分支.
sre*_*mar 28
命令
git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>
Run Code Online (Sandbox Code Playgroud)
等于
git fetch --all
Run Code Online (Sandbox Code Playgroud)
然后
git checkout -b fixes_for_dev origin/development
Run Code Online (Sandbox Code Playgroud)
双方将建立一个latest fixes_for_dev
由development
pri*_*vex 27
我使用以下命令:
git checkout --track origin/other_remote_branch
Run Code Online (Sandbox Code Playgroud)
Jav*_* C. 26
有很多替代方案,例如:
替代方案 1:
git fetch && git checkout test
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法。
替代方案 2:
git fetch
git checkout test
Run Code Online (Sandbox Code Playgroud)
是一样的,但是分两步。
Kri*_*ris 24
如果分支在origin
遥控器以外的其他地方我喜欢做以下事情:
$ git fetch
$ git checkout -b second/next upstream/next
Run Code Online (Sandbox Code Playgroud)
这将签出next
的分支upstream
远端中被称为当地的分支机构second/next
.这意味着如果您已经有一个名为next的本地分支,它将不会发生冲突.
$ git branch -a
* second/next
remotes/origin/next
remotes/upstream/next
Run Code Online (Sandbox Code Playgroud)
ali*_*isa 17
我遇到error: pathspec 'desired-branch' did not match any file(s) known to git.
了上述所有建议.我正在使用git版本1.8.3.1.
所以这对我有用:
git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
背后的解释是我注意到在获取远程分支时,它被取出到FETCH_HEAD:
$ git fetch origin desired-branch
From github.com:MYTEAM/my-repo
* branch desired-branch -> FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
chi*_*lin 17
长话短说
使用git switch
而不是git checkout
. 更多详细信息请参见此页面。
我认为答案已经过时了。Git 拆分了checkout
toswitch
和restore
now 的一些功能。
以下是我的总结:
如果您想更新远程分支的某些内容,您应该创建一个本地分支来“跟踪”远程分支。您可以在本地更新任何您想要的内容,最后推送到远程。如果您在克隆存储库后直接检出远程分支,您可能会看到“分离的 HEAD”状态以及来自 Git 的以下消息:
Note: switching to 'origin/asd'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do 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
Run Code Online (Sandbox Code Playgroud)
那么我们如何创建本地分支来跟踪远程分支呢?
要创建本地分支来跟踪远程分支,您可以使用git checkout <remote branch name>
或git switch <remote branch name>
。如果你有一个文件或文件夹与你的远程分支名称同名,git checkout
会输出一些错误消息,但git switch
可以正常工作!
例子:
查看所有分支,我们要创建一个本地分支来跟踪远程分支remotes/origin/asd
,并且我们还有文件名asd
:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/asd
remotes/origin/ereres
remotes/origin/master
remotes/origin/zxc
$ ls
a asd
Run Code Online (Sandbox Code Playgroud)
文件名与远程分支相同,如果我们使用命令git checkout
创建本地分支来跟踪远程分支, Git 应该输出一些错误消息
$ git checkout asd
fatal: 'asd' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate
Run Code Online (Sandbox Code Playgroud)
如果我们使用它就可以了git switch
!
$ git switch ereres
Branch 'ereres' set up to track remote branch 'ereres' from 'origin'.
Switched to a new branch 'ereres'
$ git branch -vv
* ereres 3895036 [origin/ereres] Update a
master f9e24a9 [origin/master] Merge branch 'master' of
Run Code Online (Sandbox Code Playgroud)
web*_*guy 16
git branch -r
说对象名称无效,因为该分支名称不在Git的本地分支列表中.使用以下命令从源更新本地分支列表:
git remote update
Run Code Online (Sandbox Code Playgroud)
然后尝试再次检查您的远程分支.
这对我有用.
我相信git fetch
拉在所有远程分支机构,这是不是原来的海报想要什么.
Eug*_*ash 13
只需git checkout
使用远程分支的名称运行即可.Git会自动创建一个跟踪远程分支的本地分支:
git fetch
git checkout test
Run Code Online (Sandbox Code Playgroud)
但是,如果在多个远程中找到该分支名称,则无法使用,因为Git不知道使用哪个.在这种情况下,您可以使用:
git checkout --track origin/test
Run Code Online (Sandbox Code Playgroud)
要么
git checkout -b test origin/test
Run Code Online (Sandbox Code Playgroud)
在2.19中,Git学习了checkout.defaultRemote
配置,它在解决这种歧义时指定了默认的远程.
小智 13
在我看来,没有人提出最简单的方法(或者也许我太笨了,不认为这是“一种方法”)。但无论如何,试试这个:
git pull origin remoteBranchName
git switch remoteBranchName
Run Code Online (Sandbox Code Playgroud)
这在同样的情况下对我有用(在我上次拉取请求后在远程创建的分支)。
Kes*_*era 12
git checkout -b "Branch_name" [ B 表示创建本地分支]
git 分支 --all
git checkout -b "你的分支名称"
git 分支
git pull origin "你的分支名称"
从 master 分支成功 checkout 到 dev 分支
Thu*_*han 11
该git remote show <origin name>
命令将列出所有分支(包括未跟踪的分支).然后,您可以找到需要获取的远程分支名称.
例:
$ git remote show origin
Run Code Online (Sandbox Code Playgroud)
使用以下步骤获取远程分支:
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)
Run Code Online (Sandbox Code Playgroud)
例:
$ git fetch origin test:test
$ git checkout test
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我不能这样做:
git checkout -b branch-name origin/branch-name
Run Code Online (Sandbox Code Playgroud)
它抛出了错误:
致命:“origin/branch-name”不是提交,无法从中创建分支“branch-name”
我必须做:
git checkout -b branch-name commit-sha
Run Code Online (Sandbox Code Playgroud)
其他人和女孩给出了解决方案,但也许我可以告诉你为什么.
git checkout test什么都不做
Does nothing
不相等doesn't work
,所以我猜你在终端输入'git checkout test'并按回车键,不会出现任何消息,也不会出现错误.我对吗?
如果答案是'是',我可以告诉你原因.
原因是工作树中有一个名为"test"的文件(或文件夹).
当git checkout xxx
解析,
xxx
最初看起来是一个分支名称,但是没有任何名为test的分支.xxx
是一条路径,幸运的是(或者不幸的是),有一个名为test的文件.所以git checkout xxx
意味着丢弃xxx
文件中的任何修改.xxx
,那么Git将尝试xxx
根据某些规则创建.其中一条规则是创建一个名为xxx
if remotes/origin/xxx
exists 的分支.获得新创建的分支机构
git fetch
Run Code Online (Sandbox Code Playgroud)
切换到另一个分支
git checkout BranchName
Run Code Online (Sandbox Code Playgroud)
从远程获取并检出分支。
git fetch <remote_name> && git checkout <branch_name>
Run Code Online (Sandbox Code Playgroud)
例如:
git fetch origin && git checkout feature / XYZ-1234-Add-alerts
要获取所有远程分支,请使用:
git fetch --all
Run Code Online (Sandbox Code Playgroud)
然后结帐到分行:
git checkout test
Run Code Online (Sandbox Code Playgroud)
只需运行这两个命令,您就可以开始使用了。
git checkout <branch-name>
git pull <remote> <branch-name>
Run Code Online (Sandbox Code Playgroud)
工作命令
git fetch origin 'remote_branch':'local_branch_name'
git switch 'local_branch_name'
git pull origin 'remote_branch':'local_branch_name'
第一个用于获取分支并从远程分支创建本地分支。
第二个是切换到本地分支。
第三个是将远程的最新更改拉取到本地分支。
您可以使用以下Bash脚本开始跟踪所有远程分支:
#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`
do git branch -f --track "$branch" "origin/$branch"
done
Run Code Online (Sandbox Code Playgroud)
这里也是一个单行版本:
git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;
Run Code Online (Sandbox Code Playgroud)
如果远程分支名称以特殊字符开头,您需要在 checkout 命令中使用单引号将其括起来,否则 git 将不知道您在谈论哪个分支。
例如,我尝试签出一个名为 as 的远程分支,#9773
但该命令无法正常工作,如下图所示:
出于某种原因,我想知道尖符号 (#) 是否与它有关,然后我尝试用单引号将分支名称括起来,例如'#9773'
rathen 而不仅仅是#9773
,幸运的是它工作正常。
$ git checkout -b '#9773' origin/'#9773'
Run Code Online (Sandbox Code Playgroud)
小智 6
对我们来说,似乎remote.origin.fetch
配置出了问题。因此,除了 ,我们看不到任何其他远程分支master
,因此git fetch [--all]
没有帮助。既没有git checkout mybranch
也git checkout -b mybranch --track origin/mybranch
没有工作,虽然它肯定是在远程。
之前的配置只允许master
获取:
$ git config --list | grep fetch
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
通过使用*
并从源获取新信息来修复它:
$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git fetch
...
* [new branch] ...
...
Run Code Online (Sandbox Code Playgroud)
现在我们可以git checkout
在本地远程分支了。
不知道这个配置是如何在我们的本地仓库中结束的。
我用过那个:
git fetch origin
git reset --hard origin/{branchname}
Run Code Online (Sandbox Code Playgroud)
我在这里尝试了很多答案,但仍然无法签出到远程分支,事实证明,当我第一次克隆存储库时,我添加了--single-branch
标志,这可能是我在尝试从远程分支创建新分支时遇到错误的原因远程分支,为了解决这个问题,我们可以更新存储库的配置以从远程存储库获取所有分支:
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch
git branch -r
Run Code Online (Sandbox Code Playgroud)
现在我们可以继续
git checkout -b feature/FS origin/feature/FS
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4963409 次 |
最近记录: |