【问题标题】:Make Git not track all branches让 Git 不跟踪所有分支
【发布时间】:2016-08-09 19:20:44
【问题描述】:

我有 4 个远程分支:A、B、C、D。A 和 B 与我不再相关,但我想远程保留它们。因此,当我执行 git fetch 时,我只想获取 C 和 D 。

【问题讨论】:

    标签: git git-fetch


    【解决方案1】:

    如何结帐特定的分支

    # fetch a remote branch from remote but the catch here is that the branch
    # will not have a tracking branch. It will be checked out locally. 
    git fetch <remote> <remote branch>:refs/remotes/<remotename>/<local branch>
    

    还有几点说明:Git 不在乎你的提交在哪里。

    Git 有一个大的内容文件 (.pack),它存储了存储库的所有内容。当您执行 fetch 时,它只是从远程执行所有内容。 Git 不会“看到”该文件中的任何分支。

    当你 checkout 分支时 git checkout 这个分支的最新提交。您当然可以移动和更改 HEAD 并将其设置为任何其他提交。

    关键是 git 不关心标签、分支等。它只是跟踪内容,并且由于 sommit 存储它的父 git 知道如何从该文件中提取“先前”提交。


    Summary

    Git 不跟踪分支或标签。它只是在内部存储它们的 SHA-1,并知道如何在需要时提取它们。


    【讨论】:

    • 谢谢解释。我们为每个任务创建一个功能分支。我想保留所有的树枝,但是当我git fetch 我收到了一堆,即使是那些超级旧的。使用git fetch --depth=&lt;depth&gt;我可以限制分支,但还有其他方法吗?
    • 你为什么关心分支是否在本地获取?您也可以这样做以从服务器中删除旧的已删除数据:git fetch --all --prune
    • 深度仅限制要获取的提交次数。与git clone --depth 相同,但与不获取其他分支无关。
    • 我关心的是团队中有人可以获取分支并从中进行选择。有没有办法将分支保持在远程但不使用fetch 下载它们?
    • 它们就在那里,您无需获取它们。如果您希望在不使用 fetch 的情况下使用它们,您可以简单地检查它们(分离 HEAD)并创建一个本地分支来处理它们。如果您在远程有分支 A:git checkout origin/A 现在您处于分离状态(因为您没有签出本地分支)并且您必须创建分支才能更新它
    猜你喜欢
    • 2010-10-05
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多