如何"撤消" - 单分支克隆?

dan*_*sky 81 git github

我用这个克隆了一个回购

git clone -b <branch name> --single-branch <github url> <target directory>

这只克隆了这个分支,但现在我想切换到master和其他分支.有没有办法除了清除它并重新开始克隆我可以撤消--single-branch首选项的其余repo?

sar*_*dne 116

你可以告诉Git拉这样的所有分支:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Run Code Online (Sandbox Code Playgroud)

如果你看.git/config,它看起来像这样:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true
Run Code Online (Sandbox Code Playgroud)

我把它与一个完整的克隆进行了比较,发现唯一的区别就是"fetch" [remote "origin"].

注意:我正在运行Git版本1.8.2.如果您运行的是旧版本的Git,配置选项可能已更改.如果我的命令不起作用,那么我建议.git/config您查看是否可以看到类似的内容.

  • 只是想特别感谢您,因为我做了大量阅读和谷歌搜索,但没有遇到这样的事情。 (2认同)
  • 乐意效劳.`git`命令行工具非常强大(实际上,大多数命令都是根据其他命令实现的),所以一旦你理解了存储库的布局,你就可以用它做很多事情(基本上是怎么做的) `.git`文件夹工作). (2认同)
  • 哇,这远非直观!奇怪的是 Git 没有一个命令来完成这个任务。是的,我成功了......现在我也知道 .git 目录中的配置文件了! (2认同)

小智 50

如果要添加单个分支,可以执行以下操作:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]
Run Code Online (Sandbox Code Playgroud)

适用于git版本1.9.1

  • 这会为.git/config添加多个`fetch =`行,当你想在远程的两个分支之间切换而不是获取一大堆其他分支时非常方便.谢谢! (4认同)

Arn*_*iva 10

要将另一个远程分支添加到我使用 克隆的本地存储库,--single-branch以下对我有用:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]
Run Code Online (Sandbox Code Playgroud)

您还可以使用通配符[remote-branch],例如

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5
Run Code Online (Sandbox Code Playgroud)

这适用于 git 版本 2.21.1。建议这样git fetch origin [remote-branch]:[local-branch]做的其他答案不起作用,因为它在未跟踪状态下创建了本地分支。运行时,git pull它首先尝试将远程分支的所有提交再次合并到我的本地分支。

  • 我第二次回到这个答案。很有用。谢谢! (2认同)
  • 最有用的答案 (2认同)

Nik*_*Kov 7

对我来说工作:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Run Code Online (Sandbox Code Playgroud)