我们可以忽略pull git中的某些文件或文件夹吗?

时间:2019-02-27 13:32:13

标签: git github

我们可以忽略拉git中的文件夹吗 像git pull origin master -f / node_modules ??

1 个答案:

答案 0 :(得分:4)

不,这不是拉动的方式。可能有一种方法可以近似您的意思,但是(1)如评论中所指出,这可能不是可行的方法[1],而(2)理解可以做什么,您需要了解有关git如何组织内容的更多信息。

通过回答问题的方式(如果您确实决定采用这种方法):

git中的提交是整个项目的快照。您合并提交-而不是文件-并且pull本质上是fetch,然后是合并(默认情况下)。

如果您想对内容的合并方式做一些非标准的事情,那么我建议您分别进行获取和合并。例如

git checkout master
git fetch 
git merge --no-commit origin/master

然后删除不需要的更改。如果仅仅是文件提交错误,类似

git rm -r node_modules

可能就足够了。在更复杂的情况下,您可以从本地主机中检出文件的版本。

然后提交合并。但是,这会创建非典型合并,有时称为“邪恶合并”。这不是合并其父级的自然结果,因此它会使用户和某些git命令(例如rebase)感到困惑。这是一种谨慎使用的技术。可以避免这种问题的一种变体是

git fetch
git checkout origin/master
git checkout -b temp
# undo the unwanted changes
git commit
git checkout master
git merge temp
git branch -d temp

这会将更改还原与合并分开,同时仍然获得“正确的”最终结果。


[1]可能更正确的方法是重写历史记录,以使node_modules似乎从未提交过。问题是,由于显然已经落实了这些提交,因此历史记录重写将需要与使用该存储库的每个开发人员进行某种协调。

清理工作可以通过rebasefilter-branch甚至是commit --amend进行-取决于基于错误提交的工作量。

您可以参阅“ git rebase”下的“从上游基础恢复中”文档,以了解重写将导致的问题以及修复该问题所需的工作-了解开发人员是否做了“错误的事情” “在修复时,可能会撤消重写。

然后,您权衡这笔费用并反对以下事实:如果不进行重写,则node_modules目录将永远成为历史记录的一部分,从而使存储库中充斥您不想携带的信息。回购。