diff --git a/pkg/integration/tests/commit/discard_old_file_change.go b/pkg/integration/tests/commit/discard_old_file_change.go
new file mode 100644
index 000000000..735dcca87
--- /dev/null
+++ b/pkg/integration/tests/commit/discard_old_file_change.go
@@ -0,0 +1,57 @@
+package commit
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var DiscardOldFileChange = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Discarding a single file from an old commit (does rebase in background to remove the file but retain the other one)",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		shell.CreateFileAndAdd("file0", "file0")
+		shell.Commit("first commit")
+
+		shell.CreateFileAndAdd("file1", "file2")
+		shell.CreateFileAndAdd("fileToRemove", "fileToRemove")
+		shell.Commit("commit to change")
+
+		shell.CreateFileAndAdd("file3", "file3")
+		shell.Commit("third commit")
+	},
+	Run: func(t *TestDriver, keys config.KeybindingConfig) {
+		t.Views().Commits().
+			Focus().
+			Lines(
+				Contains("third commit").IsSelected(),
+				Contains("commit to change"),
+				Contains("first commit"),
+			).
+			SelectNextItem().
+			PressEnter()
+
+		t.Views().CommitFiles().
+			IsFocused().
+			Lines(
+				Contains("file1").IsSelected(),
+				Contains("fileToRemove"),
+			).
+			SelectNextItem().
+			Press(keys.Universal.Remove)
+
+		t.ExpectPopup().Confirmation().
+			Title(Equals("Discard file changes")).
+			Content(Contains("Are you sure you want to discard this commit's changes to this file?")).
+			Confirm()
+
+		t.Views().CommitFiles().
+			IsFocused().
+			Lines(
+				Contains("file1").IsSelected(),
+			)
+
+		t.FileSystem().PathNotPresent("fileToRemove")
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index d63b1aa50..c550c2a0c 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -45,6 +45,7 @@ var tests = []*components.IntegrationTest{
 	commit.Staged,
 	commit.Unstaged,
 	commit.StagedWithoutHooks,
+	commit.DiscardOldFileChange,
 	custom_commands.Basic,
 	custom_commands.FormPrompts,
 	custom_commands.MenuFromCommand,
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index 7b27632fe..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-twoFiles
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/FETCH_HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/FETCH_HEAD
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD
deleted file mode 100644
index cb089cd89..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/master
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD
deleted file mode 100644
index db70e637d..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/ORIG_HEAD
+++ /dev/null
@@ -1 +0,0 @@
-7880a9728615a4d196df39600a0c8c71b40d96d6
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/config b/test/integration/discardOldFileChanges/expected/repo/.git_keep/config
deleted file mode 100644
index 8ae104545..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/config
+++ /dev/null
@@ -1,10 +0,0 @@
-[core]
-	repositoryformatversion = 0
-	filemode = true
-	bare = false
-	logallrefupdates = true
-	ignorecase = true
-	precomposeunicode = true
-[user]
-	email = CI@example.com
-	name = CI
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/description b/test/integration/discardOldFileChanges/expected/repo/.git_keep/description
deleted file mode 100644
index 498b267a8..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/description
+++ /dev/null
@@ -1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/index b/test/integration/discardOldFileChanges/expected/repo/.git_keep/index
deleted file mode 100644
index 258123f26..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/index and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude b/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude
deleted file mode 100644
index 8e9f2071f..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/info/exclude
+++ /dev/null
@@ -1,7 +0,0 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-# *.[oa]
-# *~
-.DS_Store
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD b/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index cd7bc3c77..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,9 +0,0 @@
-0000000000000000000000000000000000000000 b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697108 +1100	commit (initial): file0
-b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697108 +1100	commit: twoFiles
-7880a9728615a4d196df39600a0c8c71b40d96d6 af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697108 +1100	commit: file2
-af6725ba23f43a286deff0747476d7874113df1e af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697111 +1100	rebase: updating HEAD
-af6725ba23f43a286deff0747476d7874113df1e b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697111 +1100	rebase -i (start): checkout b7a702b642978f2a9b1af9c1c67b22127af78c92
-b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697111 +1100	rebase -i: fast-forward
-7880a9728615a4d196df39600a0c8c71b40d96d6 d14505f281a54cda96fc5fb8cd4b4ee14bae6264 CI <CI@example.com> 1641697111 +1100	commit (amend): twoFiles
-d14505f281a54cda96fc5fb8cd4b4ee14bae6264 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100	rebase -i (pick): file2
-225ad83faa797c1831a2bc956a21e2d472f21443 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100	rebase -i (finish): returning to refs/heads/master
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 13413542d..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1,4 +0,0 @@
-0000000000000000000000000000000000000000 b7a702b642978f2a9b1af9c1c67b22127af78c92 CI <CI@example.com> 1641697108 +1100	commit (initial): file0
-b7a702b642978f2a9b1af9c1c67b22127af78c92 7880a9728615a4d196df39600a0c8c71b40d96d6 CI <CI@example.com> 1641697108 +1100	commit: twoFiles
-7880a9728615a4d196df39600a0c8c71b40d96d6 af6725ba23f43a286deff0747476d7874113df1e CI <CI@example.com> 1641697108 +1100	commit: file2
-af6725ba23f43a286deff0747476d7874113df1e 225ad83faa797c1831a2bc956a21e2d472f21443 CI <CI@example.com> 1641697111 +1100	rebase -i (finish): refs/heads/master onto b7a702b642978f2a9b1af9c1c67b22127af78c92
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5
deleted file mode 100644
index fd478c4af..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/00/cbccfd35a05ef9373bba9d5633cf6e67f83dd5 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a
deleted file mode 100644
index 2794a5840..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0a/91dcf3772f7fd7409b3df04eb6ef177219303a
+++ /dev/null
@@ -1 +0,0 @@
-x���j1DS�W��]iO+��\�V�D>s'C>?j҇���n�
�Wz���d9��V�c\3{Z3Ve��S�D�.��>���~-�C� >E�րi&*'&Ġ
폇�%�a�ZԨ*�G)L�"�q�vw�����l?���V���0�̈�^������/�w����͙�r�~�K�
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370
deleted file mode 100644
index 798edd72c..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/0c/db6daba7e25b6d6d10da326e0ab74401021370
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0E]��$���DD��z�i2��iK��㛍{y�����Z�\� ��.�%xJ��<�A�2�� ���6G��.KΎL?����x�$gM��y��]�(�?���0�pƇ\��\�Z�΢��pF�Z��EU�SW��u������� �/1��Z@�
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
deleted file mode 100644
index f74bf2335..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc
deleted file mode 100644
index b09179f5f..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/18/e987d34afb121659724591cd709e2a789184fc and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442
deleted file mode 100644
index 79fcadf67..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443
deleted file mode 100644
index f0e96277f..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/22/5ad83faa797c1831a2bc956a21e2d472f21443 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da
deleted file mode 100644
index 06c9cb73d..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868
deleted file mode 100644
index 2f0336f2f..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/42/786aead9ca20a3427c38e5e5262fa787ce9868 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6
deleted file mode 100644
index ff9e69171..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/78/80a9728615a4d196df39600a0c8c71b40d96d6 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f
deleted file mode 100644
index 23756a369..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/7b/8a8396be4352039598acb43acaadc1c380551f and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c
deleted file mode 100644
index 0e95eb06d..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
deleted file mode 100644
index 285df3e5f..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e
deleted file mode 100644
index 44a1872c3..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/af/6725ba23f43a286deff0747476d7874113df1e
+++ /dev/null
@@ -1,3 +0,0 @@
-x��A
-� @Ѯ=��B��qT(��U�1�#
�&=~s�n�ekm��p釪�,R��^kr��̩xrN*)�])��|��#p
-C$�<LT�K� Q��id��_�a��ާ��_n��7���"�H) D{E0��S]��M]V���9n
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92
deleted file mode 100644
index 8bcfe2c70..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/b7/a702b642978f2a9b1af9c1c67b22127af78c92
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0Fa�9����c���#i�`��R"x|{��޼��t�S�\b6���C*�V��ToPS�.}�k�i��>NO|S{���[{��`Qx���;�1������`��7+�
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641
deleted file mode 100644
index 2e9066287..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641
+++ /dev/null
@@ -1,2 +0,0 @@
-x+)JMU03c040031QH��I5`������ֶw���w.��h�T�[H
-��y�W5�Ɨ��(�|�^-�W(x9
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264 b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264
deleted file mode 100644
index 76e9da484..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/d1/4505f281a54cda96fc5fb8cd4b4ee14bae6264 and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b b/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b
deleted file mode 100644
index 9b771fc2f..000000000
Binary files a/test/integration/discardOldFileChanges/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b and /dev/null differ
diff --git a/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master b/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index 2ebac56f2..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-225ad83faa797c1831a2bc956a21e2d472f21443
diff --git a/test/integration/discardOldFileChanges/expected/repo/file0 b/test/integration/discardOldFileChanges/expected/repo/file0
deleted file mode 100644
index 38143ad4a..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/file0
+++ /dev/null
@@ -1 +0,0 @@
-test0
diff --git a/test/integration/discardOldFileChanges/expected/repo/file1 b/test/integration/discardOldFileChanges/expected/repo/file1
deleted file mode 100644
index a5bce3fd2..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/file1
+++ /dev/null
@@ -1 +0,0 @@
-test1
diff --git a/test/integration/discardOldFileChanges/expected/repo/file2 b/test/integration/discardOldFileChanges/expected/repo/file2
deleted file mode 100644
index 180cf8328..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/file2
+++ /dev/null
@@ -1 +0,0 @@
-test2
diff --git a/test/integration/discardOldFileChanges/expected/repo/file3 b/test/integration/discardOldFileChanges/expected/repo/file3
deleted file mode 100644
index df6b0d2bc..000000000
--- a/test/integration/discardOldFileChanges/expected/repo/file3
+++ /dev/null
@@ -1 +0,0 @@
-test3
diff --git a/test/integration/discardOldFileChanges/recording.json b/test/integration/discardOldFileChanges/recording.json
deleted file mode 100644
index 0b9a99ec5..000000000
--- a/test/integration/discardOldFileChanges/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":635,"Mod":0,"Key":259,"Ch":0},{"Timestamp":899,"Mod":0,"Key":259,"Ch":0},{"Timestamp":1227,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1571,"Mod":0,"Key":13,"Ch":13},{"Timestamp":1971,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2322,"Mod":0,"Key":256,"Ch":100},{"Timestamp":2731,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3707,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/discardOldFileChanges/setup.sh b/test/integration/discardOldFileChanges/setup.sh
deleted file mode 100644
index 5b592cabd..000000000
--- a/test/integration/discardOldFileChanges/setup.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-echo test0 > file0
-git add .
-git commit -am file0
-
-echo test1 > file1
-echo testZ > fileZ
-git add .
-git commit -am twoFiles
-
-echo test2 > file2
-git add .
-git commit -am file2
-
-echo test3 > file3
-git add .
diff --git a/test/integration/discardOldFileChanges/test.json b/test/integration/discardOldFileChanges/test.json
deleted file mode 100644
index 04a59a63c..000000000
--- a/test/integration/discardOldFileChanges/test.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "description": "Discarding a single file from an old commit (does rebase in background to remove the file but retain the other one)",
-  "speed": 5
-}