变基(rebase)时如何忽略指定文件的冲突?
临时解决:变基时自动跳过特定文件的冲突
如果只是想快速完成这次变基,不想修改历史或.gitignore,可以用以下两种方式:
变基时指定全局策略(谨慎使用)
启动变基时直接指定冲突处理策略,比如保留当前功能分支的构建文件版本:git rebase master -X ours或者保留master分支的构建文件版本:
git rebase master -X theirs注意:这个策略会作用于所有冲突文件,如果其他文件也有冲突,会直接按指定策略自动解决,适合确定只有构建文件冲突的场景。
针对特定文件设置自动解决规则
先在项目根目录创建或修改.gitattributes文件,添加构建文件的规则:# 替换成你的实际构建文件路径,比如dist/**/*或者build/*.js dist/**/* merge=ours然后在git配置里添加对应的merge策略:
git config merge.ours.driver true这样在变基过程中,这些构建文件的冲突会自动采用当前分支的版本,无需手动处理。变基完成后,如果不需要这个规则,可以删除
.gitattributes里的对应行和git配置。
永久解决:停止追踪构建文件(推荐)
如果这些构建文件本来就不应该被git追踪,最好从根源解决问题,避免后续再出现类似冲突:
添加到.gitignore
将构建文件路径写入.gitignore,比如:dist/ build/ *.bundle.js从git追踪中移除已提交的构建文件
执行命令移除这些文件的追踪(不会删除本地文件):git rm --cached -r dist/替换
dist/为你的实际构建目录或文件路径。提交修改并完成变基
提交这个移除追踪的修改:git commit -m "Stop tracking webpack build files"之后再执行
git rebase master,此时构建文件已不在git追踪范围内,不会再触发冲突。
注意:如果老旧分支的历史中有大量提交包含这些构建文件,变基时可能仍会遇到历史提交的冲突。这种情况下,可以先在功能分支上清理历史(比如用
git rebase -i合并包含构建文件的提交,或者用git filter-repo彻底移除历史中的构建文件),但操作前务必备份代码。
内容的提问来源于stack exchange,提问作者deymbwoi

