问题背景

在开发过程中遇到以下情况:

  • 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策略是最安全的合并方法,既满足合并要求又保护代码不丢失。