Dav*_*vid 2088 git branch git-fetch git-branch
我的同事和我在同一个存储库上工作,我们已经将它分成两个分支,每个分支在技术上用于不同的项目,但是它们有相似之处,所以我们有时会想要master从... 返回到*branch.
但是,我有branch.我的问题是,我的同事怎么能专门拉那个分支?
一个git clone回购似乎并不在本地创建分支的他,虽然我可以在我结束推后住上unfuddle看到它们.
此外,当我最初创建分支时,我做了-b checkout.不确定这是否有很大的不同?
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
$ git fetch origin discover
$ git checkout discover
Run Code Online (Sandbox Code Playgroud)
这些是我跑的命令.但它绝对不起作用.
我希望能够检查该分支,然后推送并提交来自各个协作者或工作站的分支更改.
ral*_*nja 2829
您需要创建一个跟踪远程分支的本地分支.以下命令将创建一个名为daves_branch的本地分支,跟踪远程分支origin/daves_branch.推送更改时,将更新远程分支.
对于最新版本的git:
git checkout --track origin/daves_branch
Run Code Online (Sandbox Code Playgroud)
--track这是git checkout -b [branch] [remotename]/[branch][remotename] 在这种情况下起源的地方的简写,[branch]是两倍相同,在这种情况下是daves_branch.
对于git 1.5.6.5,你需要这个:
git checkout --track -b daves_branch origin/daves_branch
Run Code Online (Sandbox Code Playgroud)
对于git 1.7.2.3及更高版本,这已经足够了(可能已经提前开始,但这是我能够快速找到的最早确认):
git checkout daves_branch
Run Code Online (Sandbox Code Playgroud)
请注意,对于最近的git版本,此命令不会创建本地分支,并会使您处于"分离的HEAD"状态.如果需要本地分支,请使用该--track选项.详细信息请访问:http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
Mar*_*ski 922
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
Run Code Online (Sandbox Code Playgroud)
... <rbranch>远程分支或源ref在哪里,并且<lbranch>是您想要跟踪的当前不存在的本地分支或目标引用,并且您可能希望将其命名为远程分支或源ref.这在解释的选项中解释<refspec>.
Git是如此的聪明就自动完成了第一个命令,如果我标签的远程分支的前几个字母之后.IE:我甚至不必命名本地分支,Git会自动为我复制远程分支的名称.谢谢Git!
此外,正如此类SO帖子中的答案所示,如果您没有将本地分支命名为fetch,则在使用该-b标志检出时仍可以创建它.IE: git fetch <remote> <branch>后跟跟git checkout -b <branch> <remote>/<branch>我最初的答案完全一样.看样子,如果您的回购有只有一个遥控器,那么你可以这样做git checkout <branch>后fetch,它会创建一个本地分支你.EG:您刚刚克隆了一个回购邮件,想要查看远程的其他分支.
我相信fetch可能已经逐字复制了一些文档pull.特别是在部分<refspec>的选项是一样的.不过,我不相信fetch会不断merge,因此,如果您离开结肠目的地侧空fetch 应该什么都不做.
注意:这git fetch <remote> <refspec>是短的git fetch <remote> <refspec>:,因此无效,但git fetch <remote> <tag>与本地git fetch <remote> <tag>:<tag>复制远程的相同<tag>.
我想这只有在您想在本地复制远程分支时才有用,但不一定要立即检查.否则,我现在将使用上面接受的答案,这将在结账说明的第一部分和后面的选项部分中详细解释--track,因为它是一个1班轮.嗯...有点像1班轮,因为你仍然必须先跑git fetch <remote>.
仅供参考:(<refspecs>来源:目的地)的顺序解释了删除远程分支的奇怪的前Git-1.7方法.IE:不推送任何内容到目的地refspec.
pan*_*kka 355
如果您正在尝试"签出"新的远程分支(仅存在于远程分支,但不存在于本地),这就是您需要的:
git fetch origin
git checkout --track origin/<remote_branch_name>
Run Code Online (Sandbox Code Playgroud)
这假定您要从原点获取.如果没有,请用您的远程名称替换origin.
Dav*_*vid 117
检查远程存在而不是本地存在的myBranch - 这对我有用:
git fetch --all
git checkout myBranch
Run Code Online (Sandbox Code Playgroud)
我收到了这条消息:
Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
Run Code Online (Sandbox Code Playgroud)
Dan*_*Lee 51
使用git branch -a(本地和远程分支)或git branch -r(仅远程分支)查看所有远程及其分支.然后,您可以git checkout -t remotes/repo/branch对远程执行a 并创建本地分支.
还有一个git ls-remote命令可以查看该远程的所有引用和标记.
Gui*_*ent 39
标题和问题混淆了:
如果问题是我如何使用远程分支或如何git checkout远程分支,更简单的解决方案是:
使用git(> = 1.6.6),您可以使用:
git checkout <branch_name>
Run Code Online (Sandbox Code Playgroud)
如果<branch_name>找不到本地但在一个具有匹配名称的遥控器中确实存在跟踪分支,则视为等效于:
git checkout -b <branch_name> --track <remote>/<branch_name>
Run Code Online (Sandbox Code Playgroud)
为你的朋友:
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
Run Code Online (Sandbox Code Playgroud)
Man*_*d3r 29
git checkout -b serverfix origin/serverfix
Run Code Online (Sandbox Code Playgroud)
这是一个很常见的操作,git提供了--track简写:
git checkout --track origin/serverfix
Run Code Online (Sandbox Code Playgroud)
事实上,这种情况非常普遍,甚至还有一条捷径.如果您尝试签出的分支名称(a)不存在,并且(b)只与一个遥控器上的名称完全匹配,Git将为您创建跟踪分支:
git checkout serverfix
Run Code Online (Sandbox Code Playgroud)
要设置名称与远程分支不同的本地分支,可以轻松地使用具有不同本地分支名称的第一个版本:
git checkout -b sf origin/serverfix
Run Code Online (Sandbox Code Playgroud)
现在,您的本地分支sf将自动从origin/serverfix中提取.
资料来源:Pro Git第2版,由Scott Chacon和Ben Straub撰写(为便于阅读)
Jam*_*run 29
最简单的方法,至少对我来说:
git fetch origin <branchName> // will fetch the branch locally
git checkout <branchName> // to move to that branch
Run Code Online (Sandbox Code Playgroud)
Jav*_* C. 26
有很多选择,我最喜欢的是:
- 备选方案 1:
git fetch --all
git checkout YourBranch
Run Code Online (Sandbox Code Playgroud)
使用远程存在但不在本地的分支使用此替代方法。
- 备选方案 2:
git checkout -b 'YourBranch' origin/'YourRemote'
Run Code Online (Sandbox Code Playgroud)
大概,这是最简单的方法。
Kar*_*ara 23
使用这个简单的命令:
git checkout -b 'your_branch' origin/'remote branch'
Run Code Online (Sandbox Code Playgroud)
ata*_*min 15
是什么帮助了我
1)查看所有可用的远程分支(例如'remote-branch-name')
git branch -r
Run Code Online (Sandbox Code Playgroud)
2)使用远程分支名称创建本地分支
git fetch && git checkout 'remote-branch-name'
Run Code Online (Sandbox Code Playgroud)
Kum*_*hav 14
您也可以一次性获取和签出远程分支: -
git fetch && git checkout the-branch-name
Run Code Online (Sandbox Code Playgroud)
Gui*_*ume 13
我打字了
git checkout <branch_name>
Run Code Online (Sandbox Code Playgroud)
得到了
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
Run Code Online (Sandbox Code Playgroud)
Har*_*wal 13
要获取远程存在的分支,最简单的方法是:
git fetch origin branchName
git checkout branchName
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令查看它是否已经存在于远程服务器上:
git branch -r
Run Code Online (Sandbox Code Playgroud)
这将获取远程分支到您的本地,并将自动跟踪远程分支。
Sam*_*Sam 11
步骤如下;
git fetch origin或者git fetch --all,这会将所有远程分支提取到您的本地,然后这是您可以继续使用的第二个选项。
git checkout --track origin/<The_remote_branch you want to switch over>
然后在此分支上工作,您可以通过键入来验证您是否在该分支上
git branch
Run Code Online (Sandbox Code Playgroud)
它显示您当前所在的分支。
小智 11
有时你会被要求不要使用主分支并且只使用远程分支(正如我被要求的那样).所以你需要的只是远程分支.
因此,要单独克隆远程分支(没有主服务器),请执行此操作
git clone url --branch remote_branch_name
Run Code Online (Sandbox Code Playgroud)
其中,remote_branch_name是远程分支的名称
例如,
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
Run Code Online (Sandbox Code Playgroud)
这将确保使用远程分支的名称将远程分支克隆到本地分支.
现在,如果您提交代码并推送,代码将单独提交给该分支.
Vam*_*ram 10
检查您的文件,特别是在获取该远程文件.git/config时存在哪些跟踪。
[remote "randomRemote"]
url = git@github.com:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
Run Code Online (Sandbox Code Playgroud)
如果它有heads/*指向randomRemote/*,当你运行时git fetch randomRemote,它将获取所有分支。
然后你就可以签出该分支。
否则,
您需要使用它来将远程分支添加到跟踪中。.git/config运行后检查你的。你会明白的。
git remote set-branches --add randomRemote randomBranch
Run Code Online (Sandbox Code Playgroud)跑步git fetch randomRemote。这将获取远程分支。
现在你可以运行了git checkout randomBranch。
假设您的遥控器是git@xyz.git,并且您想要它的random_branch分支。该过程应如下:
首先通过以下方式查看您的遥控器列表
git remote -v
如果在上述命令的输出中没有git@xyz.git远程,则可以通过以下方式添加它:
git remote add xyz git@xyz.git
git fetch xyz
git checkout -b my_copy_random_branch xyz/random_branch
git branch -a
本地分支my_copy_random_branch将跟踪您的遥控器的random_branch分支。
如果您有一个被克隆的存储库,--depth 1那么列出的许多命令将不起作用。例如,请参见此处
% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
* branch other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我会重新克隆存储库,但也许还有其他技术,例如git浅克隆 (clone --depth) 错过远程分支
只需尝试
$ git pull origin your_branch_name
我想给您一个oneliner命令,以将所有远程分支提取到您的本地并切换到所需的新创建的本地分支:
git fetch && git checkout discover
Run Code Online (Sandbox Code Playgroud)
运行以上命令后,您将获得以下消息:
Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from origin.
Run Code Online (Sandbox Code Playgroud)
第一行指出切换到 新分支 -为什么要新?它已经在远程!
但是实际上您也必须在本地创建它,该分支从远程索引中获取并为您本地创建。
这discover是从存储库的远程分支创建的新分支discover。
但是第二行比第一行提供了更多信息,告诉我们:
我们的分支设置为跟踪具有相同名称的远程分支。
虽然将git fetch 所有分支都提取到本地,但是如果您在git branch其后运行,则只会看到master本地的分支为什么?
因为对于远程的每个分支,您也必须在本地创建它,以便像git checkout <branchname>上面的示例中那样跟踪它。
运行git checkout命令后,您git branch现在可以运行,您可以看到两个分支:
| 归档时间: |
|
| 查看次数: |
2309874 次 |
| 最近记录: |