问题背景
在开发过程中遇到以下情况:
feature/shopping-cart-v1
- 包含完整购物车功能代码的好分支feature/shopping-cart-v1-backup
- 合并main后丢失部分文件的问题分支main
- 受保护分支,不允许直接推送,且存在文件缺失问题
合并时出现大量文件删除:
85 files changed, 30 insertions(+), 2100 deletions(-)
delete mode 100644 src/main/java/com/demo/controller/CartController.java
delete mode 100644 src/main/java/com/demo/service/CartService.java
delete mode 100644 src/main/java/com/demo/repository/CartRepository.java
... (大量购物车相关文件被删除)
快速解决方案
方法1:使用ours策略(推荐)
# 1. 切换到问题分支
git checkout feature/shopping-cart-v1-backup
# 2. 重置为完整代码的分支
git reset --hard feature/shopping-cart-v1
# 3. 安全合并main分支(保留所有文件)
git merge -s ours origin/main -m "Merge main while preserving shopping cart files"
# 4. 推送
git push origin feature/shopping-cart-v1-backup
方法2:手动恢复文件
# 从好的分支恢复被删除的文件
git checkout feature/shopping-cart-v1 -- src/main/java/com/demo/controller/
git checkout feature/shopping-cart-v1 -- src/main/java/com/demo/service/
# 提交恢复
git add .
git commit -m "Restore deleted shopping cart files"
git push origin feature/shopping-cart-v1-backup
核心要点
git merge -s ours
:创建合并记录,但保留当前分支所有文件- 适用场景:目标分支有问题,需要保护源分支代码
- 预防措施:重要开发前先备份分支
总结
当main分支有问题且受保护时,使用 ours
策略是最安全的合并方法,既满足合并要求又保护代码不丢失。
评论