Learning to Unlearn while Retaining: Combating Gradient Conflicts in Machine Unlearning