git pull
并不真正对文件进行操作,而是对提交进行操作。git pull
所做的就是 run git fetch
,然后 rungit merge
或您选择的其他第二个 Git 命令。该fetch
步骤获得提交,并且merge
您可能不HEAD
想要的步骤将这些提交与您当前的 ( ) 提交和分支合并。
您在这里的括号部分肯定有正确的想法:
换句话说,是否可以下载......(......与某些特定文件相关的提交)......
诀窍是:
- 找到那些提交(你已经使用 GitHub 来实现这一点);
- 但是,一旦您找到并获得它们,就可以实际使用它们。
您只能获得整个提交,或者什么都没有;如果你得到一个完整的提交,你也会得到导致那个提交的所有提交。app-ideas 存储库(您想要的文件出现在其中)包含,在我写这篇文章的那一刻,并且只使用来自 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
更方便,因为它做的相同,然后添加五个远程跟踪名称对应于五个分支名称。例如,您现在将有一个name app-ideas/master
。它确实需要更多的预先输入,但它可以节省您以后的工作,最终您只需git remote remove app-ideas
在完成后运行。
要在没有遥控器的情况下执行此操作,例如,您必须:
git fetch https://github.com/florinpop17/app-ideas master:tempbranch
创建自己的名为 的分支tempbranch
,而不是使用app-ideas/master
. 您甚至可以不创建分支而只依赖 . FETCH_HEAD
,但是您必须记住,下一次 git fetch
运行(或已经git pull
运行)会将其清除,并且这 332 次提交中的部分或全部可能会从您自己的存储库中消失。可能你最终还是会想要删除tempbranch
,所以如果有的话,你并没有真正节省太多。
在任何情况下,获取后,您的存储库中都有所有 322 次提交。这些提交相互关联,但与存储库中的任何其他提交无关。在图论术语中,它们的提交,由你的app-ideas/master
or命名和发现,与你自己的所有提交tempbranch
形成一个不相交的子图,由你自己的分支名称命名和发现。
此时,您可以使用 Git 的各种其他操作,包括git cherry-pick
or (如EncryptedWatermelon 的答案)git checkout
来处理他们提交的内容,并将其添加到您的(仍然独立的)提交中。完成后,删除远程名称或tempbranch
名称,无论您使用哪种方法。他们的提交将变得无法找到,并最终会退出您的存储库。