git pull 并不真正在 files 上运行,而是在 commits 上运行。所有git pull 所做的只是运行git fetch,然后运行git merge 或您选择的其他第二个Git 命令。 fetch 步骤获取提交,merge 步骤(您可能不想要)将这些提交与您当前的 (HEAD) 提交和分支合并。
您在此处的括号部分肯定有正确的想法:
换句话说,是否可以下载...(...与某些特定文件相关的提交)...
诀窍是:
- 查找这些提交(您已使用 GitHub 来实现此目的);
- 但在您找到并获得它们后实际使用它们。
你只能获得整个提交,或者什么都没有;如果你得到一个完整的提交,你也会得到所有导致那个提交的提交。 app-ideas repository(你想要的文件出现在其中)包含,在我写这篇文章的那一刻,并且只使用来自 GitHub 的信息,而实际上没有仔细观察,332 次提交。它还显示了五个分支名称。
您可以将所有 332 个提交添加到您的存储库,或者在某些情况下(但不是这个)添加所有 332 个提交的某个子集,而无需使用远程名称:
git fetch https://github.com/florinpop17/app-ideas <refspec> [<refspec> ...]
将引入由 refspec 参数标识的提交,并记住它通过 FETCH_HEAD 和 refspec 参数引入的内容.但是:
git remote add app-ideas https://github.com/florinpop17/app-ideas
git fetch app-ideas
更方便,因为它的作用相同,然后添加了五个 remote-tracking 名称,对应于五个分支名称。例如,您现在将有一个 name app-ideas/master。它确实需要预先输入更多内容,但它可以节省您以后的工作,最终您只需在完成后运行git remote remove app-ideas。
要在没有遥控器的情况下执行此操作,例如,您必须:
git fetch https://github.com/florinpop17/app-ideas master:tempbranch
创建您自己的名为tempbranch 的分支,而不是使用app-ideas/master。您甚至可以创建 no 分支并仅依赖 FETCH_HEAD,但是您必须记住 next 您运行 git fetch 或让 git pull 运行 -将清除它,并且这 332 个提交中的部分或全部可能会从您自己的存储库中消失。可能你最终还是想删除tempbranch,所以你并没有真正节省多少。
无论如何,在获取之后,您的存储库中有所有 322 次提交。这些提交相互关联,但与您的存储库中的任何 other 提交无关。在图论术语中,它们的提交(由您的 app-ideas/master 或 tempbranch 命名和找到)与您自己的所有提交形成一个不相交的子图,由您自己的分支名称命名和找到。
此时,您可以使用 Git 的各种其他操作,包括 git cherry-pick 或(如 EncryptedWatermelon's answer)git checkout,处理来自他们提交的内容,并将其添加到您的(仍然独立的)提交中。完成后,删除远程名称或tempbranch 名称,无论您使用哪种方法。他们的提交将变得无法找到,并最终会退出您的存储库。