当在本地仓库使用filter-branch时,如何从远程仓库拉取更新?

3
例如,我想要研究 AngularJS 的代码,所以我只需使用 git clone https://github.com/angular/angular.git 进行克隆。为了模拟更新情景,我会使用 git reset --hard HEAD~10 来丢弃最近的提交。在重置之后,git pull 很好用,因为它可以轻松地从远程仓库获取更新。但是,如果使用 filter-branch,则 git pull 就很麻烦,我的问题是如何解决这种困境。
由于我只能在自己的存储库上进行修改,有时原始存储库可能会有一些我不想要的目录,例如某些项目可能在存储库中有 node_modules。在这里,我以脚本文件夹为例,我应该使用本地存储库上的 filter-branch 进行移除操作,但是在运行 git filter-branch --tree-filter "rm scripts -rf" 后,从原始存储库中获取更新就会出错。
在 filter-branch 操作之后,git pull 会出现错误,并且很难管理冲突。

那么,如何处理没有很好管理的存储库,以至于我必须使用 filter-branch 进行删除操作?问题是如何在 filter-branche 操作之后获取更新,有没有一个好的解决方案呢?
1个回答

3
当您使用filter-branch时,会更改分支中每个提交的提交哈希值。这应该是最后的手段,而不是您经常使用的工具。
相反,您可以使用类似以下命令从存储库中删除目录:
git rm -r scripts

然后进行提交。这将创建一个新的提交,删除脚本目录,同时保留以前的提交,因为它们已经存在。

“改变”提交的操作,包括 filter-branch,应该在共享的提交上避免使用。这些操作会导致各种复杂情况,其中一些您正在发现。


但是如果原始存储库中有一些垃圾文件,例如二进制exe文件、密码文件等,我认为最好使用filter-branch将其删除,但是我无法再拉取更新了:( - hugemeow
@hugemeow,Git 中的一切都依赖于哈希值。如果您在本地更改提交的哈希值,则 git pull 将无法确定如何合并更改。就 Git 而言,您的本地副本和远程副本没有共同的历史记录。如果可能的话,保持提交哈希值非常重要。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接