* ## Summary
I have successfully implemented the smart rebase feature to fix the "rebase onto different branch" issue. Here's what was accomplished:
### ✅ **Key Changes Made:**
1. **Updated GitService::rebase_branch()** ([git_service.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/services/git_service.rs#L333-L337)):
- Added `old_base_branch` parameter to method signature
- Implemented smart rebase logic that only cherry-picks commits unique to the task branch
- Maintains backward compatibility with standard rebase when no old base branch is provided
2. **Added Helper Methods** ([git_service.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/services/git_service.rs#L1190-L1310)):
- `get_merge_base()`: Finds common ancestors between commits
- `find_unique_commits()`: Identifies commits unique to task branch (not in either base)
- `cherry_pick_commits()`: Applies specific commits onto new base with conflict detection
3. **Updated TaskAttempt Model** ([task_attempt.rs](file:///private/var/folders/kr/jdxkcn7129j376nrg0stj9zm0000gn/T/vibe-kanban/vk-7f2a-execute-pl/backend/src/models/task_attempt.rs#L815-L826)):
- Modified `rebase_attempt()` to pass current base branch as old base when rebasing to different branch
- Updated `perform_rebase_operation()` to accept old base branch parameter
### ✅ **Problem Solved:**
The issue where rebasing a task branch from `old_base` to `new_base` included unintended commits (when `old_base` was itself based on `new_base`) is now resolved. The smart rebase algorithm:
1. Calculates the merge-base between task branch and old base branch
2. Identifies commits that are unique to the task branch only
3. Cherry-picks only those unique commits onto the new base branch
4. Excludes any commits that originated from the base branch lineage
### ✅ **Backward Compatibility:**
The implementation maintains full backward compatibility. When no old base branch is provided, it falls back to the standard Git rebase behavior, ensuring existing functionality continues to work as expected.
### ✅ **Testing:**
- ✅ Code compiles successfully
- ✅ All existing tests pass (95/95)
- ✅ Both backend and frontend build successfully
- ✅ No regressions introduced
The implementation is now ready and will correctly handle rebasing task branches onto different base branches without including unintended commits from the base branch history.
* Cleanup script
* Remove case where old_branch is optional
* Fmt