【问题标题】:How do I "undo" a --single-branch clone?如何“撤消”--single-branch 克隆?
【发布时间】:2013-07-16 20:30:19
【问题描述】:

我使用克隆了一个仓库

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

这仅克隆了这个分支,但现在我想切换到 master 和其他分支。除了清除它并重新开始克隆其余的 repo 之外,还有什么方法可以撤消 --single-branch 首选项?

【问题讨论】:

    标签: git github


    【解决方案1】:

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

    git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
    git fetch origin
    

    如果你查看.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/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
        rebase = true
    

    我将此与完整克隆进行了比较,发现唯一的区别是[remote "origin"] 下的“获取”。

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

    【讨论】:

    • 只是想特别感谢您,因为我做了很多阅读和谷歌搜索,却没有遇到这样的事情。
    • 很高兴为您提供帮助。 git 命令行工具非常强大(实际上,大多数命令都是根据其他命令实现的),因此一旦您了解了存储库的布局方式(基本上是.git 文件夹有效)。
    • 这对我不起作用 - 运行这些命令后 git show-ref tags 仍然失败。
    • 请注意,如果分支也使用以下语法进行浅层克隆,则此解决方案也可以工作,这会遇到 OP 描述的相同缺点:git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
    • 哇,这太不直观了!奇怪的是 Git 没有一个命令来完成这个。是的,我得到了它的工作......现在我也知道了 .git 目录中的配置文件!
    【解决方案2】:

    为我工作:

    git remote remove origin
    git remote add origin https://*<yourPath>*.git
    git fetch
    

    【讨论】:

      【解决方案3】:

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

      git remote set-branches --add origin [remote-branch]
      git fetch
      git checkout [remote-branch]
      

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

      git remote set-branches --add origin release-1.*
      git fetch
      git checkout release-1.5
      

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

      【讨论】:

      • 我第二次回到这个答案。很有用。谢谢!
      • 最有用的答案
      • 我来过这里好几次xd
      【解决方案4】:

      我最初应用了 Dominik Pawlak 的答案,它奏效了。但是在我将更多代码提交到我的新分支之后,我无法进行任何进一步的更改。

      还有另一种完全重置single-branch的方法,这里没有提到:

      git remote remove origin
      git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
      git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
      git pull
      

      这会将所有内容重置为原始状态。

      【讨论】:

        【解决方案5】:

        只需更改您本地 repo 的 .git/config 文件,[remote origin] sectionfetch 行。

        在这样的事情之前

        [remote "origin"]
            url = https://github.com/owner/repo.git
            fetch = +refs/heads/master:refs/remotes/origin/master
        

        以后会这样

        [remote "origin"]
            url = https://github.com/owner/repo.git
            fetch = +refs/heads/*:refs/remotes/origin/*
        

        【讨论】:

          【解决方案6】:

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

          git remote set-branches --add origin [remote-branch]
          git fetch origin [remote-branch]:[local-branch]
          

          适用于 git 版本 1.9.1

          【讨论】:

          • 这会在 .git/config 中添加多个 fetch = 行,当您想要在远程的两个分支之间切换但又不想获取一大堆其他分支时非常方便。谢谢!
          【解决方案7】:

          只需将原始存储库添加为新的遥控器,然后就可以工作了吗?

          git remote add path/to/myrepo myNewOrigin
          git fetch myNewOrigin
          

          如果您愿意,您甚至可以删除当前的“origin”遥控器并将“myNewOrigin”重命名为“origin”。

          从那里你可以拉/合并/变基。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-03-14
            • 2021-10-18
            • 2011-10-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-17
            相关资源
            最近更新 更多