jesseduffield.lazygit/pkg/commands/git_commands
Stefan Haller f84ada4941 Show renamed files in the custom patch builder
When loading the files of a commit we passed --no-renames, so a rename
showed up as a separate delete and add rather than a single R entry.
That made it impossible to work with a rename that also modifies the
file: the modifications were spread across a full deletion and a full
addition instead of appearing as the handful of lines that actually
changed. The staging view already shows renames and lets you stage
their hunks, so there was no good reason for the patch builder to
differ; the flag was only there because the commit-file parser couldn't
cope with the rename record format.

Switch the commit-file loader and the per-file diff to --find-renames,
teach the parser about the rename record (a status followed by two
paths), and carry the previous path through the patch builder so the
diff for a rename is loaded with both paths, which is what makes git
emit the rename in the first place.

A whole-file selection keeps the rename in the header, so the rename
moves or is discarded together with the file's contents. A partial
selection instead strips the rename metadata and points the header at
the new path, so applying the patch only changes the contents and
leaves the rename in place; the blob index line is kept so that a 3-way
apply can still fall back to a blob merge.

Discarding a renamed file from a commit now discards both the new and
the old path, so the new file is removed and the old one is restored.

Changing the rename similarity threshold refreshes the commit files
panel too, not just the files panel, so that a rename can turn into a
delete and add or back. It is disabled while building a patch, however,
because the patch builder caches each file's diff by path and would
desync if a rename changed into a delete and add underneath it.

Finally, copying a file's diff from the commit files panel now passes
both paths for a rename, so the copied diff shows the rename instead of
a new-file add.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 13:05:09 +02:00
..
bisect.go Don't log the "git rev-list" call when marking bisect commits 2026-01-25 11:47:07 +01:00
bisect_info.go rename sha to hash 2 2024-04-12 08:33:47 +02:00
blame.go Add command to find base commit for creating a fixup 2024-01-10 09:11:40 +01:00
branch.go Add backward cycling support for all branches log view 2026-03-08 17:06:17 +01:00
branch_loader.go perf(branches): use for-each-ref ahead-behind for git >= 2.41 2026-04-27 07:09:23 +02:00
branch_loader_test.go perf(branches): use for-each-ref ahead-behind for git >= 2.41 2026-04-27 07:09:23 +02:00
branch_test.go Replace MergeOpts struct with MergeVariant enum 2025-10-19 21:24:28 +02:00
commit.go Tolerate trailing newlines in AddCoAuthorToDescription 2026-04-21 18:51:17 +02:00
commit_file_loader.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
commit_file_loader_test.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
commit_loader.go Add ActionFlag field to Commit 2026-01-28 10:15:45 +01:00
commit_loader_test.go Use a better approach for determining pushed and merge statuses 2025-07-31 15:50:53 +02:00
commit_loading_shared.go Fix showing diffs for renamed file when filtering by path 2025-07-27 12:05:41 +02:00
commit_test.go Tolerate trailing newlines in AddCoAuthorToDescription 2026-04-21 18:51:17 +02:00
common.go Remove go-git repo from GitCommon 2026-03-27 14:08:07 +01:00
config.go Add support for git flow using git-flow-next 2026-05-26 11:57:09 +02:00
config_test.go Add support for git flow using git-flow-next 2026-05-26 11:57:09 +02:00
custom.go Add runCommand function to Go template syntax 2025-04-09 10:44:36 +02:00
deps_test.go Add Status.RefsSnapshot 2026-06-19 18:07:48 +02:00
diff.go Don't log the GetDiff command 2025-11-15 18:15:24 +01:00
file.go Remove deprecated edit configs 2025-07-08 16:32:21 +02:00
file_loader.go Suppress optional locks by default again, except foreground refresh 2026-07-02 16:05:08 +02:00
file_loader_test.go Suppress optional locks by default again, except foreground refresh 2026-07-02 16:05:08 +02:00
file_test.go Remove deprecated edit configs 2025-07-08 16:32:21 +02:00
flow.go Add support for git flow using git-flow-next 2026-05-26 11:57:09 +02:00
flow_test.go Add support for git flow using git-flow-next 2026-05-26 11:57:09 +02:00
git_command_builder.go Revert "Add GlobalArg/GlobalArgIf to GitCommandBuilder" 2026-07-02 16:49:36 +02:00
git_command_builder_test.go Add runGitCmdOnPaths utility 2026-03-27 14:34:47 +01:00
github.go Remove now unused code 2026-05-10 15:28:14 +02:00
github_test.go Support GitHub Enterprise for the pull-requests feature 2026-05-10 15:28:14 +02:00
hosting_service.go Remove now unused code 2026-05-10 15:28:14 +02:00
main_branches.go Cleanup: remove the ignoringWarnings hack from GetMergeBase 2025-07-31 15:21:34 +02:00
patch.go Fix patch commands when git config has color=always 2026-03-30 10:42:26 +02:00
rebase.go Pass todo flag to EditRebaseTodo 2026-01-28 10:15:51 +01:00
rebase_test.go Fix dropping submodule changes from a commit 2025-10-10 12:55:58 +02:00
reflog_commit_loader.go Fix showing diffs for renamed file when filtering by path 2025-07-27 12:05:41 +02:00
reflog_commit_loader_test.go Fix showing diffs for renamed file when filtering by path 2025-07-27 12:05:41 +02:00
remote.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
remote_loader.go Add PushUrls field to models.Remote 2026-05-04 13:09:47 +02:00
remote_loader_test.go Add PushUrls field to models.Remote 2026-05-04 13:09:47 +02:00
repo_paths.go Remove git version specific code for versions we no longer support 2025-07-09 12:18:58 +02:00
repo_paths_test.go Remove git version specific code for versions we no longer support 2025-07-09 12:18:58 +02:00
stash.go Add PagerConfig 2025-10-14 12:17:13 +02:00
stash_loader.go Add hash field to models.StashEntry 2025-08-25 19:23:30 +02:00
stash_loader_test.go Add hash field to models.StashEntry 2025-08-25 19:23:30 +02:00
stash_test.go Replace paging config with an array of pagers 2025-10-14 12:17:13 +02:00
status.go Add Status.RefsSnapshot 2026-06-19 18:07:48 +02:00
status_test.go Add Status.RefsSnapshot 2026-06-19 18:07:48 +02:00
submodule.go Show per-side commit logs for submodule conflicts in the main view 2026-06-28 16:12:36 +02:00
submodule_test.go Show per-side commit logs for submodule conflicts in the main view 2026-06-28 16:12:36 +02:00
sync.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
sync_test.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
tag.go Copy gocui files into lazygit repo under pkg/gocui 2026-04-30 14:29:08 +02:00
tag_loader.go Revert "Add IsAnnotated field to models.Tag struct" 2025-07-28 10:53:51 +02:00
tag_loader_test.go Revert "Add IsAnnotated field to models.Tag struct" 2025-07-28 10:53:51 +02:00
version.go Add a method GitVersion.IsAtLeast 2024-01-10 09:18:38 +01:00
version_test.go Add a method GitVersion.IsAtLeast 2024-01-10 09:18:38 +01:00
working_tree.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
working_tree_test.go Show renamed files in the custom patch builder 2026-07-04 13:05:09 +02:00
worktree.go Centralise logic for obtaining repo paths 2023-07-30 18:35:24 +10:00
worktree_loader.go Show branch name and detached HEAD in worktrees tab 2026-03-08 12:51:46 +01:00
worktree_loader_test.go Show branch name and detached HEAD in worktrees tab 2026-03-08 12:51:46 +01:00