我们可以像 git pull origin master -f /node_modules 这样忽略 pull git 中的文件夹吗?
不,这不是拉动的工作方式。可能有一种方法可以近似您的意思,但是(1)正如评论中指出的,这可能不是可行的方法[1],并且(2)要了解可以做什么,您需要了解更多关于 git 如何组织内容的信息。
通过回答这个问题(如果您决定采用这种方法):
git 中的提交是整个项目的快照。您合并提交 - 不是文件 - 并且 apull本质上是 afetch后跟合并(默认情况下)。
如果您想对内容的合并方式做一些非标准的事情,那么我建议单独进行获取和合并。例如
git checkout master
git fetch
git merge --no-commit origin/master
Run Code Online (Sandbox Code Playgroud)
然后删除不需要的更改。如果只是文件提交不正确,比如
git rm -r node_modules
Run Code Online (Sandbox Code Playgroud)
可能就足够了。在更复杂的情况下,您可以从本地主服务器中查看文件的版本。
然后提交合并。 但这会产生非典型合并,有时称为“邪恶合并”。它不是合并其父级的自然结果,因此它可能会混淆用户和某些 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
Run Code Online (Sandbox Code Playgroud)
这将更改恢复与合并分开,同时仍然获得“正确”的最终结果。
[1] 可能更正确的做法是重写历史记录,使之node_modules看起来从未被提交过。问题是,由于显然这些提交已经被推送,历史重写将需要与使用该存储库的每个开发人员进行一些协调。
清理可以使用rebase、 或来完成filter-branch,甚至可以只是完成commit --amend- 取决于有多少工作是基于错误的提交。
您可以参考git rebase“从上游变基恢复”下的文档,以了解重写将导致的问题以及修复它所需的工作 - 了解如果开发人员在修复它时做了“错误的事情”,它可能会撤消重写。
然后,您权衡成本并反对这样一个事实:如果您不进行重写,则 node_modules 目录将永远成为历史记录的一部分,从而使存储库中包含您不想在存储库中携带的信息。
| 归档时间: |
|
| 查看次数: |
2467 次 |
| 最近记录: |