summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuka Markušić <luka.markusic@microblink.com>2022-05-08 13:30:43 +0200
committerLuka Markušić <luka.markusic@microblink.com>2022-05-08 14:24:28 +0200
commitca191159f514c016f720751ae05d111d8a9d26dd (patch)
treec606713eedf16155d3c06aeb7496c709ccd813f3
parentf7c44f2407243418a0c4bb8380ede097694644c3 (diff)
Discard staged changes only
-rw-r--r--pkg/commands/git_commands/stash.go4
-rw-r--r--pkg/gui/controllers/workspace_reset_controller.go24
-rw-r--r--pkg/i18n/english.go4
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG1
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD0
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD1
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD1
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/config8
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/description1
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/indexbin0 -> 262 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude6
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD5
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master3
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22bin0 -> 147 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827bin0 -> 21 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442bin0 -> 50 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f60523
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535dabin0 -> 21 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07bin0 -> 81 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3dbin0 -> 198 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa8984483
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a2
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf982
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2cbin0 -> 101 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5bin0 -> 21 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6abin0 -> 28 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e23064946412
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8ebin0 -> 189 bytes
-rw-r--r--test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master1
-rw-r--r--test/integration/discardStagedFiles/expected/repo/file01
-rw-r--r--test/integration/discardStagedFiles/expected/repo/file11
-rw-r--r--test/integration/discardStagedFiles/expected/repo/file21
-rw-r--r--test/integration/discardStagedFiles/expected/repo/file31
-rw-r--r--test/integration/discardStagedFiles/recording.json1
-rw-r--r--test/integration/discardStagedFiles/setup.sh26
-rw-r--r--test/integration/discardStagedFiles/test.json1
36 files changed, 102 insertions, 1 deletions
diff --git a/pkg/commands/git_commands/stash.go b/pkg/commands/git_commands/stash.go
index c479d8610..c0d187a13 100644
--- a/pkg/commands/git_commands/stash.go
+++ b/pkg/commands/git_commands/stash.go
@@ -25,6 +25,10 @@ func NewStashCommands(
}
}
+func (self *StashCommands) DropNewest() error {
+ return self.cmd.New("git stash drop").Run()
+}
+
func (self *StashCommands) Drop(index int) error {
return self.cmd.New(fmt.Sprintf("git stash drop stash@{%d}", index)).Run()
}
diff --git a/pkg/gui/controllers/workspace_reset_controller.go b/pkg/gui/controllers/workspace_reset_controller.go
index dc830b3ba..93277173b 100644
--- a/pkg/gui/controllers/workspace_reset_controller.go
+++ b/pkg/gui/controllers/workspace_reset_controller.go
@@ -12,7 +12,7 @@ import (
func (self *FilesController) createResetMenu() error {
red := style.FgRed
- nukeStr := "reset --hard HEAD && git clean -fd"
+ nukeStr := "git reset --hard HEAD && git clean -fd"
if len(self.model.Submodules) > 0 {
nukeStr = fmt.Sprintf("%s (%s)", nukeStr, self.c.Tr.LcAndResetSubmodules)
}
@@ -66,6 +66,28 @@ func (self *FilesController) createResetMenu() error {
},
{
LabelColumns: []string{
+ self.c.Tr.LcDiscardStagedChanges,
+ red.Sprint("stash staged and drop stash"),
+ },
+ Tooltip: "This will create a new stash entry containing only staged files and then drop it.",
+ OnPress: func() error {
+ self.c.LogAction(self.c.Tr.Actions.RemoveStagedFiles)
+ if !self.helpers.WorkingTree.IsWorkingTreeDirty() {
+ return self.c.ErrorMsg(self.c.Tr.NoTrackedStagedFilesStash)
+ }
+ if err := self.git.Stash.SaveStagedChanges("[lazygit] tmp stash"); err != nil {
+ return self.c.Error(err)
+ }
+ if err := self.git.Stash.DropNewest(); err != nil {
+ return self.c.Error(err)
+ }
+
+ return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES}})
+ },
+ Key: 'S',
+ },
+ {
+ LabelColumns: []string{
self.c.Tr.LcSoftReset,
red.Sprint("git reset --soft HEAD"),
},
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 3dd9822e5..4a2f2f7b9 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -265,6 +265,7 @@ type TranslationSet struct {
LcDiscardAllChangesToAllFiles string
LcDiscardAnyUnstagedChanges string
LcDiscardUntrackedFiles string
+ LcDiscardStagedChanges string
LcHardReset string
LcViewResetOptions string
LcCreateFixupCommit string
@@ -594,6 +595,7 @@ type Actions struct {
NukeWorkingTree string
DiscardUnstagedFileChanges string
RemoveUntrackedFiles string
+ RemoveStagedFiles string
SoftReset string
MixedReset string
HardReset string
@@ -883,6 +885,7 @@ func EnglishTranslationSet() TranslationSet {
LcDiscardAllChangesToAllFiles: "nuke working tree",
LcDiscardAnyUnstagedChanges: "discard unstaged changes",
LcDiscardUntrackedFiles: "discard untracked files",
+ LcDiscardStagedChanges: "discard staged changes",
LcHardReset: "hard reset",
LcViewResetOptions: `view reset options`,
LcCreateFixupCommit: `create fixup commit for this commit`,
@@ -1193,6 +1196,7 @@ func EnglishTranslationSet() TranslationSet {
NukeWorkingTree: "Nuke working tree",
DiscardUnstagedFileChanges: "Discard unstaged file changes",
RemoveUntrackedFiles: "Remove untracked files",
+ RemoveStagedFiles: "Remove staged files",
SoftReset: "Soft reset",
MixedReset: "Mixed reset",
HardReset: "Hard reset",
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..6c493ff74
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+file2
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..c3e34c41d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+02f629e46dbaa03b58196cced3df07b02c0daf22
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/config b/test/integration/discardStagedFiles/expected/repo/.git_keep/config
new file mode 100644
index 000000000..596ebaeb3
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/config
@@ -0,0 +1,8 @@
+[core]
+ repositoryformatversion = 0
+ filemode = true
+ bare = false
+ logallrefupdates = true
+[user]
+ email = CI@example.com
+ name = CI
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/description b/test/integration/discardStagedFiles/expected/repo/.git_keep/description
new file mode 100644
index 000000000..498b267a8
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/index b/test/integration/discardStagedFiles/expected/repo/.git_keep/index
new file mode 100644
index 000000000..be47b0322
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/index
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude b/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude
new file mode 100644
index 000000000..a5196d1be
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/info/exclude
@@ -0,0 +1,6 @@
+# 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]
+# *~
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..9afe44c14
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 22f24c5fcc97c1ff826ecb66b60bdc01937f6052 CI <CI@example.com> 1652009263 +0200 commit (initial): file0
+22f24c5fcc97c1ff826ecb66b60bdc01937f6052 9e7ff93a5c67a0ef098e9e436961746f333edf98 CI <CI@example.com> 1652009263 +0200 commit: file1
+9e7ff93a5c67a0ef098e9e436961746f333edf98 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009263 +0200 commit: file2
+02f629e46dbaa03b58196cced3df07b02c0daf22 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009266 +0200 reset: moving to HEAD
+02f629e46dbaa03b58196cced3df07b02c0daf22 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009266 +0200 reset: moving to HEAD
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..e5e4b05c6
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 22f24c5fcc97c1ff826ecb66b60bdc01937f6052 CI <CI@example.com> 1652009263 +0200 commit (initial): file0
+22f24c5fcc97c1ff826ecb66b60bdc01937f6052 9e7ff93a5c67a0ef098e9e436961746f333edf98 CI <CI@example.com> 1652009263 +0200 commit: file1
+9e7ff93a5c67a0ef098e9e436961746f333edf98 02f629e46dbaa03b58196cced3df07b02c0daf22 CI <CI@example.com> 1652009263 +0200 commit: file2
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22
new file mode 100644
index 000000000..5dd10885d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/02/f629e46dbaa03b58196cced3df07b02c0daf22
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
new file mode 100644
index 000000000..f74bf2335
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442
new file mode 100644
index 000000000..79fcadf67
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052
new file mode 100644
index 000000000..f4e1952b1
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/22/f24c5fcc97c1ff826ecb66b60bdc01937f6052
@@ -0,0 +1,3 @@
+x
+0=+.&ݦ.=3 )%o>0 ZKYK;২)q!Y1KfSv
+Qg§IByyʱ$GǬtN>i37y2+ \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da
new file mode 100644
index 000000000..06c9cb73d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07
new file mode 100644
index 000000000..6a6f24362
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5c/ef9afea6a37d89f925e24ebf71adecb63d1f07
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d
new file mode 100644
index 000000000..7aee98aa9
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/5e/2f5743436bdc7602aa3486d5ff294940603c3d
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448
new file mode 100644
index 000000000..c84b87a17
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/66/bbc809cdafd867cf9320bfb7484bb8fa898448
@@ -0,0 +1,3 @@
+x+)JMUd040031QHI5`ֶww.hT[H
+ e"ǨS,gu"YH
+$x~5(;rբW-Ж+^ \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a
new file mode 100644
index 000000000..c5c3d1d48
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9d/b161bba78fbd20e7e4ae004be28e40d747726a
@@ -0,0 +1,2 @@
+x
+0D=+.vn<3 -5o.޽ üŵu,BNǘ}O(YF묈yg3[uZN2sqȄw};'ܧ~BٞzkB!zb#dZۤ97%uYAJ  BP \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98
new file mode 100644
index 000000000..1c2077cd7
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/7ff93a5c67a0ef098e9e436961746f333edf98
@@ -0,0 +1,2 @@
+xA
+0E] 2$"BW=F2D>K."A" p)<iTr=Pȁ3{9-bਣITH•OJєOnf{|˺z"d$o0tnty3?9 \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c
new file mode 100644
index 000000000..0e95eb06d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
new file mode 100644
index 000000000..285df3e5f
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a
new file mode 100644
index 000000000..ee4385f12
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/c7/c7da3c64e86c3270f2639a1379e67e14891b6a
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641
new file mode 100644
index 000000000..2e9066287
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641
@@ -0,0 +1,2 @@
+x+)JMU03c040031QHI5`ֶww.hT[H
+ yW5Ɨ(| ^-W(x9 \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e
new file mode 100644
index 000000000..80258c14d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/objects/e3/18207cf3da045ce47e2632a5326b61030a2c8e
Binary files differ
diff --git a/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master b/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..c3e34c41d
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+02f629e46dbaa03b58196cced3df07b02c0daf22
diff --git a/test/integration/discardStagedFiles/expected/repo/file0 b/test/integration/discardStagedFiles/expected/repo/file0
new file mode 100644
index 000000000..38143ad4a
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/file0
@@ -0,0 +1 @@
+test0
diff --git a/test/integration/discardStagedFiles/expected/repo/file1 b/test/integration/discardStagedFiles/expected/repo/file1
new file mode 100644
index 000000000..a5bce3fd2
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/file1
@@ -0,0 +1 @@
+test1
diff --git a/test/integration/discardStagedFiles/expected/repo/file2 b/test/integration/discardStagedFiles/expected/repo/file2
new file mode 100644
index 000000000..c7c7da3c6
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/file2
@@ -0,0 +1 @@
+hello there
diff --git a/test/integration/discardStagedFiles/expected/repo/file3 b/test/integration/discardStagedFiles/expected/repo/file3
new file mode 100644
index 000000000..c7c7da3c6
--- /dev/null
+++ b/test/integration/discardStagedFiles/expected/repo/file3
@@ -0,0 +1 @@
+hello there
diff --git a/test/integration/discardStagedFiles/recording.json b/test/integration/discardStagedFiles/recording.json
new file mode 100644
index 000000000..5abd7e1a8
--- /dev/null
+++ b/test/integration/discardStagedFiles/recording.json
@@ -0,0 +1 @@
+{"KeyEvents":[{"Timestamp":1175,"Mod":0,"Key":256,"Ch":32},{"Timestamp":1991,"Mod":0,"Key":256,"Ch":68},{"Timestamp":2923,"Mod":0,"Key":256,"Ch":83},{"Timestamp":4453,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":213,"Height":56}]} \ No newline at end of file
diff --git a/test/integration/discardStagedFiles/setup.sh b/test/integration/discardStagedFiles/setup.sh
new file mode 100644
index 000000000..caff56b7d
--- /dev/null
+++ b/test/integration/discardStagedFiles/setup.sh
@@ -0,0 +1,26 @@
+#!/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
+git add .
+git commit -am file1
+
+echo test2 > file2
+git add .
+git commit -am file2
+
+echo "hello there" > file1
+echo "hello there" > file2
+echo "hello there" > file3
diff --git a/test/integration/discardStagedFiles/test.json b/test/integration/discardStagedFiles/test.json
new file mode 100644
index 000000000..9edc4a815
--- /dev/null
+++ b/test/integration/discardStagedFiles/test.json
@@ -0,0 +1 @@
+{ "description": "Discarding staged changes", "speed": 5 }