From 724ad90f88dd9a9e6220d0467bc19b1e1a4beb17 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Thu, 1 Oct 2026 11:25:47 +0200 Subject: [PATCH] feat(git): add ff-only merge and allow a merged worktree without merge commit --- src/ClaudeDo.Data/Git/GitService.cs | 8 ++++++++ src/ClaudeDo.Data/Repositories/WorktreeRepository.cs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ClaudeDo.Data/Git/GitService.cs b/src/ClaudeDo.Data/Git/GitService.cs index bacd9855..13cd34a4 100644 --- a/src/ClaudeDo.Data/Git/GitService.cs +++ b/src/ClaudeDo.Data/Git/GitService.cs @@ -450,6 +450,14 @@ public sealed class GitService return (exitCode, stderr); } + /// git merge --ff-only: moves the checked-out branch to or fails without touching it. + public async Task<(int ExitCode, string Stderr)> MergeFastForwardOnlyAsync( + string worktreePath, string sourceRef, CancellationToken ct = default) + { + var (exitCode, _, stderr) = await RunGitAsync(worktreePath, ["merge", "--ff-only", sourceRef], ct); + return (exitCode, stderr); + } + public async Task MergeAbortAsync(string repoDir, CancellationToken ct = default) { var (exitCode, _, stderr) = await RunGitAsync(repoDir, ["merge", "--abort"], ct); diff --git a/src/ClaudeDo.Data/Repositories/WorktreeRepository.cs b/src/ClaudeDo.Data/Repositories/WorktreeRepository.cs index 2abf7c72..af6d4eef 100644 --- a/src/ClaudeDo.Data/Repositories/WorktreeRepository.cs +++ b/src/ClaudeDo.Data/Repositories/WorktreeRepository.cs @@ -36,7 +36,7 @@ public sealed class WorktreeRepository .ExecuteUpdateAsync(s => s.SetProperty(w => w.State, state), ct); } - public async Task SetMergedAsync(string taskId, string mergeCommit, CancellationToken ct = default) + public async Task SetMergedAsync(string taskId, string? mergeCommit, CancellationToken ct = default) { await _context.Worktrees .Where(w => w.TaskId == taskId)