执行git rebase -i --root时遇package-lock.json覆盖错误求解决
解决Git变基时package-lock.json冲突问题
问题根源
初始提交里包含了package-lock.json,后续提交将它加入.gitignore取消追踪。执行git rebase -i --root时,Git会从初始提交开始重建提交历史,此时初始提交会试图将package-lock.json写入仓库,但当前工作区存在未被追踪的同名文件,Git为防止数据丢失报错中断变基。
解决步骤
中止当前变基进程
先回到正常工作状态:git rebase --abort备份工作区的package-lock.json
避免文件内容丢失,先移到临时位置:mv package-lock.json package-lock.json.bak重新启动交互式变基
git rebase -i --root修改初始提交,移除package-lock.json
在弹出的todo编辑界面中,将初始提交的pick改为edit(比如把pick 47377f1...改成edit 47377f1...),保存退出后Git会停在初始提交的修改状态:- 从初始提交中移除
package-lock.json(仅从仓库移除,后续恢复本地文件):git rm --cached package-lock.json - 提交修改后的初始提交:
git commit --amend --no-edit - 继续完成变基:
git rebase --continue
此时可按需求修改其他提交的信息,完成变基流程。
- 从初始提交中移除
恢复本地的package-lock.json
变基完成后,把备份的文件恢复:mv package-lock.json.bak package-lock.json强制推送修改后的历史到远程
因为修改了历史提交,需要用强制推送更新远程仓库(--force-with-lease比--force更安全,会检查远程是否有未同步的修改):git push --force-with-lease
内容的提问来源于stack exchange,提问作者NXY
相关产品推荐
相关产品推荐

